Skip to content

fix: 1일 1매매 패스 가드 — 당일 재실행의 회전상한 우회 차단#444

Merged
easygap merged 1 commit into
mainfrom
fix/daily-trade-once-guard
Jul 7, 2026
Merged

fix: 1일 1매매 패스 가드 — 당일 재실행의 회전상한 우회 차단#444
easygap merged 1 commit into
mainfrom
fix/daily-trade-once-guard

Conversation

@easygap

@easygap easygap commented Jul 7, 2026

Copy link
Copy Markdown
Owner

무엇

점검 중 발견한 운영 구멍 수정 — 같은 날 사이클 재실행이 회전 상한을 사실상 2배로 만드는 문제를 코드로 차단합니다.

발견 (실측)

operation_events 확인 결과 일일 태스크가 사이클을 2회 연속 실행한 날이 있습니다(7/3, 7/7 — CYCLE_START/END 두 쌍, 1분 간격). 멱등 upsert라 스냅샷은 무해하지만, 드리프트가 큰 날엔 실행마다 회전 상한(1회 15%)이 따로 적용돼 하루 30%가 돌 수 있습니다. 6/10 진입 뭉침 사고(하루 4회 실행 → 61% 집중 매입, 타이밍 비용 -1%p)와 같은 계열이며, 지금까지는 문서 경고로만 막고 있었습니다.

수정 — 1일 1매매 패스 가드

  • run_rebalance: 바스켓별로 당일 체결 이력이 있으면 매매 패스(plan/execute)를 건너뜀. 스냅샷·리포트·관측성은 그대로 진행하고 REBALANCE_SKIPPED_DAILY_LIMIT 이벤트를 남깁니다.
  • 판정 실패 시 기존 동작 유지(가드는 방어선이지 게이트가 아님), dry-run은 계획 확인 용도라 가드 미적용.
  • 우회: --force-rebalance (운영자 명시 결정).
  • 부수 효과: 11:00/14:00 결측 복구 재시도가 더 안전해짐 — 첫 실행이 매매 후 스냅샷 전에 죽어도, 재시도는 매매 없이 스냅샷만 복구.

함께

  • 일일 스케줄 태스크 프롬프트에 "명령은 정확히 1회만 실행" 명시(이중 실행의 근원 방어).
  • 설계 문서 §3 재시작 주의에 "코드로 강제됨" 반영.

테스트

  • 당일 체결 존재 → plan/execute 미호출 + 스냅샷 유지 / --force-rebalance 우회 / 무체결 정상 경로 / dry-run 미적용 / 판정 실패 폴백 — 5케이스 추가.
  • 실CLI 스모크: 새 코드로 사이클 정상 순환(두 바스켓 스냅샷 upsert, 무오류).
  • 전체 스위트 통과.

operation_events 점검에서 일일 태스크가 사이클을 2회 연속 실행한 날을
실측(7/3·7/7, CYCLE_START/END 두 쌍). 멱등 upsert라 스냅샷은 무해하지만
드리프트가 큰 날엔 실행마다 회전 상한(1회 15%)이 따로 적용돼 하루 30%가
돌 수 있다 — 6/10 진입 뭉침(하루 4회 실행 → 61% 집중 매입)과 같은 계열로,
지금까지 문서 경고로만 막던 것을 코드로 강제한다.

- run_rebalance: 바스켓별 당일 체결 이력이 있으면 매매 패스(plan/execute)
  생략, 스냅샷·리포트·관측성은 그대로 + REBALANCE_SKIPPED_DAILY_LIMIT 기록
- 판정 실패 시 기존 동작 유지(방어선이지 게이트가 아님), dry-run 미적용
- 우회는 --force-rebalance (운영자 명시 결정)
- 부수 효과: 결측 복구 재시도(11/14시)가 매매 없이 스냅샷만 복구하게 돼
  더 안전해짐

함께: 일일 태스크 프롬프트에 명령 1회 실행 명시(근원 방어), 문서 §3에
코드 강제 반영.

테스트 5케이스 추가(가드 발동/우회/무체결/dry-run/판정실패 폴백),
실CLI 스모크 정상. 전체 스위트 1643 통과.
@easygap easygap merged commit 480bc94 into main Jul 7, 2026
1 check passed
@easygap easygap deleted the fix/daily-trade-once-guard branch July 7, 2026 02:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant