fix(lotto-evolver): previous_base diff + 일요일 cron skip + idempotent evaluate
- weight_evolver.evaluate_weekly: save_base_history 직전에 current_base를 previous_base로 캡처해 return dict에 포함 → formatter가 진짜 diff 표시 가능 - evaluate_weekly: same effective_from row 이미 존재 시 save skip + idempotent return (토 22:00 lotto cron과 agent-office 22:15 재호출 중복 row 방지) - main._run_weight_evolver_daily: 일요일(weekday=6) 도 skip — 토요일 trial을 INSERT OR REPLACE로 덮어쓰는 문제 방지 - telegram_lotto._format_evolution_report: eval_result.previous_base 우선 사용 (없으면 current_base 폴백) → diff 자기 자신 비교 버그 수정 - test_lotto_evolution_format: previous_base 키 추가 + 새 diff 검증 테스트 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -277,8 +277,24 @@ def evaluate_weekly() -> Dict[str, Any]:
|
||||
)
|
||||
|
||||
next_monday = today + timedelta(days=(7 - today.weekday()) % 7 or 7)
|
||||
next_monday_iso = next_monday.isoformat()
|
||||
|
||||
# Idempotent guard: 같은 effective_from으로 이미 저장된 row가 있으면 skip
|
||||
existing = db.get_base_history(limit=1)
|
||||
if existing and existing[0]["effective_from"] == next_monday_iso:
|
||||
return {
|
||||
"ok": True,
|
||||
"draw_no": latest["drw_no"],
|
||||
"week_start": week_start,
|
||||
"previous_base": existing[0].get("weight"),
|
||||
"winner": winner,
|
||||
"new_base": existing[0]["weight"], # 이미 저장된 값
|
||||
"update_reason": existing[0].get("update_reason", "idempotent_skip"),
|
||||
"per_day": per_day,
|
||||
}
|
||||
|
||||
db.save_base_history(
|
||||
effective_from=next_monday.isoformat(),
|
||||
effective_from=next_monday_iso,
|
||||
weight=new_base,
|
||||
source_trial_id=winner["trial_id"],
|
||||
update_reason=reason,
|
||||
@@ -290,6 +306,7 @@ def evaluate_weekly() -> Dict[str, Any]:
|
||||
"ok": True,
|
||||
"draw_no": latest["drw_no"],
|
||||
"week_start": week_start,
|
||||
"previous_base": current_base, # save 이전에 캡처한 값 — diff 계산용
|
||||
"winner": winner,
|
||||
"new_base": new_base,
|
||||
"update_reason": reason,
|
||||
|
||||
Reference in New Issue
Block a user