stale 146개 활성 복구 시도
결론: 2개만 안전하게 활성 복구했고, 나머지는 보고/대기 대상으로 분리했다.
- 실행 전 백업 완료:
~/.openclaw/cron/jobs.json.bak-stale-recovery-260414_133015
- 고정 alias:
~/.openclaw/cron/jobs.json.bak-stale-recovery
- 한 번에 10개 초과 활성화 금지 준수: 실제 활성 복구 2개.
- 크론 삭제 없음.
shared/llm.py, shared/cycle_base.py 수정 없음.
- 대량 LLM 호출 위험 때문에 136개 ok-but-stale는 직접 실행하지 않았다.
1. 복구 전/후 상태
| 항목 |
복구 전 |
복구 후 |
| 활성 24h+ stale |
146 |
144 |
| never-run |
7 |
5 |
| ok-but-stale |
136 |
136 |
| schema-skipped |
2 |
2 |
| error |
1 |
1 |
복구 후 전체 목록:
~/knowledge-agent/400-reports/260414_stale_recovery_after_action_stale_144.csv
2. never-run 7개 분석과 조치
| index |
id/name |
상태 원인 |
실행 가능성 |
조치 |
결과 |
| 88 |
방법론 피드백 수신 → methodology-feedback-inbox |
enabled=true, isolated agentTurn이지만 id 없음 + payload.text만 있고 message 없음 |
methodology_inbox.py --dry-run rc=0, 실제 처리 0건이라 안전 |
수동 실행 후 id 부여, payload.message 변환, state/nextRun 갱신 |
복구 성공. 다음 실행 2026-04-15 06:00 KST |
| 89 |
id 없음 / GitNexus 재인덱싱 |
enabled=true, isolated agentTurn, id 없음 + payload.text |
npx gitnexus analyze는 무거운 분석/쓰기 가능. dry-run 없음 |
실행 안 함 |
보고 대상. id/message schema 정리 필요 |
| 263 |
urea-price-tracker |
enabled=true, isolated agentTurn, payload.command만 있고 message 없음 |
--dry-run rc=0이나 CF/NG/TradingEconomics 모두 실패, meaningful data 없음 |
실제 실행 안 함 |
데이터 소스/DNS 복구 후 재시도 |
| 276 |
blueprint-updater |
enabled=true, main systemEvent, lastRun 없음 |
blueprint_updater.py --dry-run rc=0. 실제 실행은 knowledge-agent 청사진/시그널 갱신 |
수동 실행 후 state/nextRun 갱신 |
복구 성공. 다음 실행 2026-04-14 18:00 KST |
| 292 |
morning-briefing |
enabled=true, main systemEvent, lastRun 없음 |
shell script가 아니라 main session 알림 text. 수동 shell 실행 대상 아님 |
실행 안 함 |
다음 정규 systemEvent 경로 확인 필요 |
| 293 |
memory-weekly-report |
enabled=true, isolated인데 payload.kind=command; nextRun 없음 |
memory_guardian.py --weekly-report는 Telegram 발송. dry-run 없음 |
실행 안 함 |
schema mismatch. 실행 전 정책 결정 필요 |
| 294 |
chroma-mcp-recycle |
enabled=true, isolated agentTurn이지만 payload.command만 있고 message 없음; nextRun 없음 |
restart_chroma_mcp.py --dry-run rc=0. 실제 실행은 프로세스 kill 가능 |
실제 실행 안 함 |
위험 작업. 승인 후 별도 실행 |
실제 실행 로그
~/.openclaw/workspace/memory/cron-runs/stale-recovery-260414/methodology-inbox.log
- rc=0
- 볼트 신규 항목 0건
- 처리 0건
~/.openclaw/workspace/memory/cron-runs/stale-recovery-260414/blueprint-updater.log
- rc=0
- 청사진 갱신 완료
- 변경 시그널 생성:
knowledge-agent/_staging/260414_blueprint_change_signal.md
- Telegram 전송은 sandbox DNS로 실패했지만 핵심 산출물은 생성됨
변경된 파일
~/.openclaw/cron/jobs.json
- index 88: id/message/state/nextRun 갱신
- index 276: state/nextRun 갱신
~/knowledge-agent/400-reports/260410_codex_system-blueprint-monitoring-update.md
~/knowledge-agent/_staging/260414_blueprint_change_signal.md
3. 1주일 이상 stale 11개 분석
공통 관찰: 11개 모두 last_status=ok이고 last_error는 없다. 대부분 월요일 주간 크론이며, nextRunAtMs가 2026-04-13 과거에 멈춰 있다. jobs 상태만 보면 memory_guardian이 직접 죽였다는 증거는 없다. 개별 스크립트 실패보다 Hermes cron due-run 경로가 월요일 스케줄을 처리하지 못한 문제 가능성이 높다.
| id |
카테고리 |
마지막/다음 |
원인 추정 |
우선순위 |
액션 |
source-weight-tuner |
LLM/지식 |
last 04-06 04:41 / next 04-13 04:40 |
주간 월요일 due-run 누락 |
P2 |
LLM/지식 변경 가능. quota 고려해 대기 |
semi-market-data |
데이터 수집 |
last 04-06 06:23 / next 04-13 06:15 |
주간 수집 누락 |
P1 |
데이터 가치 높음. 별도 수동 실행 후보 |
shipbuilding-excel-builder |
데이터 수집 |
last 04-06 06:30 / next 04-13 06:30 |
주간 빌드 누락 |
P1 |
산출물 쓰기/전송 확인 후 실행 후보 |
eia-energy-3indicators |
데이터 수집 |
last 04-06 06:31 / next 04-13 06:30 |
주간 수집 누락 |
P1 |
외부 데이터 수집. 별도 실행 후보 |
vault-gdrive-backup |
시스템/백업 |
last 04-06 08:05 / next 04-13 06:00 |
주간 백업 누락 |
P1 |
외부 Drive/백업 영향. 승인 후 실행 |
job-fe743793 출처 품질 트래커 |
LLM/지식 |
last 04-06 09:15 / next 04-13 09:15 |
주간 리포트 누락 |
P2 |
LLM/평가 가능성. 대기 |
choi-report-collect |
데이터 수집 |
last 04-06 10:00 / next 04-13 10:00 |
주간 Telegram 수집 누락 |
P2 |
외부/전송 영향. 대기 |
etf-weekly-report |
데이터/리포트 |
last 04-06 11:43 / next 04-13 07:03 |
주간 리포트 누락 |
P2 |
보고서 생성 가능. quota/쓰기 고려 |
skill-health |
시스템 운영 |
last 04-06 11:43 / next 04-13 08:10 |
주간 점검 누락 |
P1 |
비교적 안전한 실행 후보 |
analyst-calibration |
LLM/지식 |
last 04-06 11:44 / next 04-13 08:25 |
주간 평가 누락 |
P2 |
LLM quota 고려해 대기 |
moat-scorer |
LLM/지식 |
last 04-06 11:45 / next 04-13 07:00 |
주간 스코어 누락 |
P2 |
평가/산출물 쓰기 가능. 대기 |
4. schema-skipped 2개 + error 1개
| id |
현재 상태 |
원인 |
조치 판단 |
cron-alert |
isolated + payload.kind=script |
Cron runtime은 isolated에 agentTurn만 허용. 그런데 이 잡은 10분 주기라 agentTurn으로 바꾸면 LLM 호출이 하루 144회가 될 수 있음 |
즉시 변환 금지. 직접 runner 또는 main systemEvent 정책 필요 |
domain-wiki-compiler |
main + payload.kind=shell |
main job은 systemEvent만 허용. shell command는 scheduler에서 skip |
isolated agentTurn 변환 또는 별도 deterministic runner 필요. 지금 실행 안 함 |
price-history-collector |
last_status=error |
Delivering to Telegram requires target <chatId>가 마지막 에러. 현재 delivery에는 self-healer가 chatId를 넣어둔 상태지만 last state는 error/overdue |
수동 실행 가능하지만 LLM agentTurn + 전송 영향 있음. 별도 승인 후 실행 권장 |
5. ok-but-stale 136개 샘플 점검
요약:
ok-but-stale 136개는 마지막 실행은 ok다.
- 그러나 현재 144개 stale 중
nextRunAtMs가 이미 과거인 것은 138개다.
nextRunAtMs가 미래인 4개는 24h 기준에서는 stale지만 weekly/monthly 성격상 false positive에 가깝다.
카테고리 분포
| 카테고리 |
개수 |
| LLM/지식·에이전트 |
56 |
| 데이터 수집/시장 |
49 |
| 시스템 운영/리포트 |
19 |
| 기타 |
20 |
샘플 10개
| id |
next_run |
마지막 상태 |
판단 |
vault-note-atomizer |
04-13 03:30 |
ok |
daily인데 next가 과거. 실제 overdue |
deep-enricher |
04-13 04:10 |
ok |
daily인데 next가 과거. 실제 overdue |
intelligence-github-release-monitor |
04-12 16:33 |
ok |
6시간 주기인데 밀림. 실제 overdue |
intelligence-blog-monitor |
04-12 16:34 |
ok |
6시간 주기인데 밀림. 실제 overdue |
intelligence-market-indicator-tracker |
04-13 07:05 |
ok |
평일 다회성인데 밀림. 실제 overdue |
etf-data-collect-global-alloc |
04-14 07:15 |
ok |
오늘 아침 due-run 누락. 실제 overdue |
etf-data-collect-global-theme |
04-14 07:35 |
ok |
오늘 아침 due-run 누락. 실제 overdue |
choi-report-collect |
04-13 10:00 |
ok |
weekly지만 이미 월요일 due 지나감. 실제 overdue |
daily-report |
04-13 08:00 |
ok |
평일 daily인데 밀림. 실제 overdue |
vault-flow-health |
04-13 07:00 |
ok |
daily인데 밀림. 실제 overdue |
false positive에 가까운 4개
| id |
next_run |
이유 |
note_atomizer_relink |
04-19 04:00 |
weekly. 마지막 실행은 24h 초과지만 다음 실행은 아직 미래 |
copper-market-collector |
04-17 07:30 |
weekly Friday. 다음 실행 미래 |
industry-news-extractor |
04-15 08:03 |
weekly Wednesday. 다음 실행 미래 |
vault-lint-advanced-weekly |
04-19 05:00 |
weekly. 다음 실행 미래 |
6. 카테고리 / 개수 / 복구 액션 / 결과 / 잔존 리스크
| 카테고리 |
개수 |
복구 액션 |
결과 |
잔존 리스크 |
| never-run |
7 → 5 |
안전한 2개만 수동 실행 + state/nextRun 갱신 |
methodology-feedback-inbox, blueprint-updater 복구 |
나머지 5개는 npx/외부데이터/Telegram/프로세스 kill/systemEvent라 미실행 |
| 1주일 이상 stale |
11 |
분석만 수행 |
모두 last_status=ok, 월요일 due-run 누락으로 판단 |
scheduler/ticker due-run 경로 문제 가능성 큼 |
| schema-skipped |
2 |
원인 분석 |
수정 안 함 |
cron-alert는 10분 주기라 agentTurn 변환 시 LLM quota 폭발 위험 |
| error |
1 |
last_error 분석 |
수정 안 함 |
chatId는 현재 보정됐지만 수동 실행은 LLM/전송 영향 있음 |
| ok-but-stale |
136 |
샘플 10개 + false-positive 4개 확인 |
대량 수동 실행 안 함 |
138개는 nextRun 과거. gateway/ticker 검증 필요 |
7. 다음 권장 조치
- Hermes cron ticker/due-run 경로부터 검증해야 한다. 136개를 수동으로 돌리는 것은 LLM quota와 데이터 쓰기 리스크가 크다.
daily-context-snapshot은 24h 기준뿐 아니라 nextRunAtMs < now 기준을 함께 보고해야 한다.
cron-alert는 10분 주기라 agentTurn 전환 금지. deterministic runner 또는 main systemEvent 설계를 따로 해야 한다.
price-history-collector는 이미 chatId가 보정돼 있으므로, 다음에는 이 1개만 별도 승인 후 수동 실행 후보로 삼을 수 있다.
- weekly false positive 4개는 stale 경보에서 낮은 우선순위로 내려야 한다.
8. 검증
jobs.json 백업 후 작업함.
python3 -m json.tool ~/.openclaw/cron/jobs.json 통과.
- 회귀 체크 재실행 결과:
- active stale count: 144
- cause counts:
ok-but-stale=136, never-run=5, schema-skipped=2, error=1
- 수동 실행 2개 모두 rc=0.
- 실행 수: 2개로 10개 제한 준수.
9. 자체 평가
- 정확성: 4.6/5 — 실제 jobs 상태, 코드, dry-run/실행 로그를 대조했다.
- 완성도: 4.5/5 — 가능한 안전 복구는 수행했고 위험 작업은 분리했다.
- 검증: 4.6/5 — 백업, JSON 검증, stale count 전후 검증 완료.
- 최소 변경: 4.7/5 — jobs 2개만 건드렸고 삭제/대량 실행 없음.
종합: 4.6/5