feat: 블랙아웃 복구 시 가격/세션 재검증 강화 (#328) #345

Merged
jihoson merged 2 commits from feature/issue-328-blackout-revalidation into feature/v3-session-policy-stream 2026-03-01 09:43:09 +09:00
Collaborator

Summary

  • 블랙아웃 복구 주문 실행 전 가격 재검증을 추가
    • BLACKOUT_RECOVERY_PRICE_REVALIDATION_ENABLED (default: true)
    • BLACKOUT_RECOVERY_MAX_PRICE_DRIFT_PCT (default: 5.0)
  • queued 가격 대비 현재가 이탈률이 임계값 초과 시 복구 주문 드롭
  • 세션/시장 기반 설정 해석 경로(_resolve_market_setting)를 통해 세션별 정책 적용
  • process_blackout_recovery_orderssettings 인자 추가, daily/realtime 호출부 연결

Test

  • pytest -q tests/test_main.py -k "process_blackout_recovery_executes_valid_intents or process_blackout_recovery_drops_policy_rejected_intent or process_blackout_recovery_drops_intent_on_excessive_price_drift"
  • python3 -m py_compile src/main.py src/config.py tests/test_main.py

Refs: #328

## Summary - 블랙아웃 복구 주문 실행 전 가격 재검증을 추가 - `BLACKOUT_RECOVERY_PRICE_REVALIDATION_ENABLED` (default: true) - `BLACKOUT_RECOVERY_MAX_PRICE_DRIFT_PCT` (default: 5.0) - queued 가격 대비 현재가 이탈률이 임계값 초과 시 복구 주문 드롭 - 세션/시장 기반 설정 해석 경로(`_resolve_market_setting`)를 통해 세션별 정책 적용 - `process_blackout_recovery_orders`에 `settings` 인자 추가, daily/realtime 호출부 연결 ## Test - `pytest -q tests/test_main.py -k "process_blackout_recovery_executes_valid_intents or process_blackout_recovery_drops_policy_rejected_intent or process_blackout_recovery_drops_intent_on_excessive_price_drift"` - `python3 -m py_compile src/main.py src/config.py tests/test_main.py` Refs: #328
agentson added 1 commit 2026-03-01 09:33:41 +09:00
feat: revalidate blackout recovery orders by price/session context (#328)
Some checks failed
Gitea CI / test (pull_request) Waiting to run
Gitea CI / test (push) Has been cancelled
0ceb2dfdc9
agentson reviewed 2026-03-01 09:37:35 +09:00
agentson left a comment
Author
Collaborator

PR #345 Review: ACT-11 블랙아웃 복구 가격 재검증

LGTM

플랜 준수: ACT-11 (GAP-4 잔여, #328) — 블랙아웃 복구 시 가격/세션 재검증 강화. 플랜과 일치합니다.

구현 품질:

  • _resolve_market_setting() 활용으로 세션별 재검증 임계값 오버라이드 가능 — ACT-10과 일관된 패턴
  • 국내/해외 가격 조회 분기 처리 적절 (broker.get_current_price vs overseas_broker.get_overseas_price)
  • queued_price <= 0 or current_price <= 0 방어 코드로 잘못된 가격 데이터 안전 처리
  • drift 계산: abs(current_price - queued_price) / queued_price * 100.0 — 양방향(상승/하락) 감지 올바름
  • 로깅 충분 (drop 사유 + 구체적 수치)

설정:

  • BLACKOUT_RECOVERY_PRICE_REVALIDATION_ENABLED (default: True) — 기존 동작에 영향 없음
  • BLACKOUT_RECOVERY_MAX_PRICE_DRIFT_PCT (default: 5.0, ge=0.0, le=100.0) — 합리적 범위

테스트:

  • 기존 테스트에 broker.get_current_price mock 추가 — 기존 동작 유지 확인
  • 새 테스트: price drift 6% > threshold 5% → intent 드롭 + send_order 미호출 + validate_policy 미호출 확인

Nit (optional, 머지 차단 아님):

  1. 해외 주식 price drift 테스트도 있으면 좋겠습니다 (overseas_broker.get_overseas_price 경로). 현재는 국내(KR) 경로만 테스트됩니다.
  2. 가격 조회 실패 시(예외 발생) 동작이 명시되지 않았습니다 — _retry_connection이 예외를 전파하면 해당 intent가 스킵되는지 확인 필요.
## PR #345 Review: ACT-11 블랙아웃 복구 가격 재검증 ### ✅ LGTM **플랜 준수**: ACT-11 (GAP-4 잔여, #328) — 블랙아웃 복구 시 가격/세션 재검증 강화. 플랜과 일치합니다. **구현 품질:** - `_resolve_market_setting()` 활용으로 세션별 재검증 임계값 오버라이드 가능 — ACT-10과 일관된 패턴 - 국내/해외 가격 조회 분기 처리 적절 (`broker.get_current_price` vs `overseas_broker.get_overseas_price`) - `queued_price <= 0 or current_price <= 0` 방어 코드로 잘못된 가격 데이터 안전 처리 - drift 계산: `abs(current_price - queued_price) / queued_price * 100.0` — 양방향(상승/하락) 감지 올바름 - 로깅 충분 (drop 사유 + 구체적 수치) **설정:** - `BLACKOUT_RECOVERY_PRICE_REVALIDATION_ENABLED` (default: True) — 기존 동작에 영향 없음 - `BLACKOUT_RECOVERY_MAX_PRICE_DRIFT_PCT` (default: 5.0, ge=0.0, le=100.0) — 합리적 범위 **테스트:** - 기존 테스트에 `broker.get_current_price` mock 추가 — 기존 동작 유지 확인 - 새 테스트: price drift 6% > threshold 5% → intent 드롭 + `send_order` 미호출 + `validate_policy` 미호출 확인 **Nit (optional, 머지 차단 아님):** 1. 해외 주식 price drift 테스트도 있으면 좋겠습니다 (`overseas_broker.get_overseas_price` 경로). 현재는 국내(KR) 경로만 테스트됩니다. 2. 가격 조회 실패 시(예외 발생) 동작이 명시되지 않았습니다 — `_retry_connection`이 예외를 전파하면 해당 intent가 스킵되는지 확인 필요.
agentson added 1 commit 2026-03-01 09:40:10 +09:00
test: add blackout recovery overseas/failure revalidation coverage (#328)
Some checks are pending
Gitea CI / test (push) Waiting to run
Gitea CI / test (pull_request) Waiting to run
5fae9765e7
Author
Collaborator

리뷰 확인했고 nit 2건 반영했습니다.

추가 반영:

  • 해외 가격 경로 테스트 추가
    • overseas_broker.get_overseas_price 분기에서 drift 초과 시 드롭 검증
  • 가격 조회 실패 동작 테스트 추가
    • 가격 조회 예외 시 주문 미실행 + 정책 검증 미실행 + intent 재큐잉(requeue) 검증

검증:

  • pytest -q tests/test_main.py -k "process_blackout_recovery_executes_valid_intents or process_blackout_recovery_drops_policy_rejected_intent or process_blackout_recovery_drops_intent_on_excessive_price_drift or process_blackout_recovery_drops_overseas_intent_on_excessive_price_drift or process_blackout_recovery_requeues_intent_when_price_lookup_fails" (5 passed)
  • python3 -m py_compile tests/test_main.py

반영 커밋: 5fae976

리뷰 확인했고 nit 2건 반영했습니다. 추가 반영: - 해외 가격 경로 테스트 추가 - `overseas_broker.get_overseas_price` 분기에서 drift 초과 시 드롭 검증 - 가격 조회 실패 동작 테스트 추가 - 가격 조회 예외 시 주문 미실행 + 정책 검증 미실행 + intent 재큐잉(requeue) 검증 검증: - `pytest -q tests/test_main.py -k "process_blackout_recovery_executes_valid_intents or process_blackout_recovery_drops_policy_rejected_intent or process_blackout_recovery_drops_intent_on_excessive_price_drift or process_blackout_recovery_drops_overseas_intent_on_excessive_price_drift or process_blackout_recovery_requeues_intent_when_price_lookup_fails"` (5 passed) - `python3 -m py_compile tests/test_main.py` 반영 커밋: `5fae976`
agentson reviewed 2026-03-01 09:42:33 +09:00
agentson left a comment
Author
Collaborator

Nit 반영 확인

Nit 1 (해외 주식 경로 테스트): test_process_blackout_recovery_drops_overseas_intent_on_excessive_price_drift 추가 확인. overseas_broker.get_overseas_price → 현재가 106.0, 큐 가격 100.0 → drift 6% > 5% → send_overseas_order 미호출. 해외 경로 완전히 커버됨.

Nit 2 (가격 조회 예외 처리): test_process_blackout_recovery_requeues_intent_when_price_lookup_fails 추가 확인. get_current_priceConnectionErrorrequeue(intent) 호출 + intent.attempts == 1 검증. settings=None으로 기본값 경로를 타도록 설계한 것도 올바름.

LGTM.

## Nit 반영 확인 ✅ **Nit 1 (해외 주식 경로 테스트)**: `test_process_blackout_recovery_drops_overseas_intent_on_excessive_price_drift` 추가 확인. `overseas_broker.get_overseas_price` → 현재가 106.0, 큐 가격 100.0 → drift 6% > 5% → `send_overseas_order` 미호출. 해외 경로 완전히 커버됨. **Nit 2 (가격 조회 예외 처리)**: `test_process_blackout_recovery_requeues_intent_when_price_lookup_fails` 추가 확인. `get_current_price` → `ConnectionError` → `requeue(intent)` 호출 + `intent.attempts == 1` 검증. `settings=None`으로 기본값 경로를 타도록 설계한 것도 올바름. LGTM.
jihoson merged commit 35d81fb73d into feature/v3-session-policy-stream 2026-03-01 09:43:09 +09:00
jihoson deleted branch feature/issue-328-blackout-revalidation 2026-03-01 09:43:09 +09:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#345