feat: implement local scenario engine for playbook execution (issue #80) #102
Reference in New Issue
Block a user
Delete Branch "feature/issue-80-scenario-engine"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Test plan
Closes #80
리뷰 반영 커밋 요약
1차 리뷰 반영 (
d2fc829)Finding 1: TypeError 방지
_safe_float()정적 메서드 추가 —str,Decimal,"30%"등 비정상 타입을 안전하게float | None으로 변환evaluate_condition()의 모든 market_data 값 접근을_safe_float()로 래핑Finding 2 (부분): 키 누락 시 warning 로그
logger.warning추가테스트 추가 (38 → 43 tests)
test_string_value_no_exception— 문자열 숫자"25"처리test_percent_string_returns_false—"30%"→ False (예외 없음)test_decimal_value_no_exception—Decimal("25.0")처리test_mixed_invalid_types_no_exception— list, dict, object 등test_missing_key_logs_warning— 키 누락 시 warning 확인2차 리뷰 반영 (
e711d67)Finding 1: Log Spam 방지
_warned_keys: set[str]+_warn_missing_key()메서드 추가Open Q2: match_details 정규화
_build_match_details()가_safe_float()정규화 값을 저장하도록 변경테스트 추가 (43 → 44 tests)
test_missing_key_logs_warning_once— 3회 호출 시 warning 1회만 발생 확인test_match_details_normalized— string 입력이 float로 정규화되어 저장됨 확인범위 밖 → Issue 1-7로 이관
%문자열 정규화 정책 (데이터 소스 레벨)