feat(execution,obs): 호가단위 스냅(dcy-030/#28) + 운영 관측성(dcy-029/#29) + REL-007 환류
dcy-030 (issue #28, P0 체결 복구): - REQ-083 KRX 호가단위(tick) 순수 유틸 (domain/pricing.py) - REQ-070 CHG: 슬리피지 실효가 호가단위 스냅 — 상한 준수(매수 floor/매도 ceil) + band<1tick 하한/상한 보장 + 부동소수 epsilon 가드. 147700→148400/54500→54700. - BAT-044 release-candidate dcy-029 (issue #29, 운영 관측성): - REQ-084 구조화 로깅 기반 (runtime/logging_setup.py): ISO8601 KST·레벨·Loki JSON ·correlation id(slot_id) - REQ-085 주문 결과 로깅 (event=order_submit|fill|reject) - REQ-087 거부 ERROR 가시성 (조용한 롤백 제거) - REQ-086 청산 reason+actor 동반 노출 (안전망/전략 구분, 신규 필드 없음) - REQ-088 운영 조회 CLI report (application/operator_report.py, 보유·오늘 체결 ·실현 PnL net·대기, direct-DB) - REQ-089 운영자 런북 docs/operations.md - REQ-090 baseline 정합 (runtime-flows·project-structure·interface-contract) - BAT-045(P0)·BAT-046(P1) release-candidate REL-007: confirmed → feedback-captured (운영 인스턴스 라이브 검증 + #28/#29 환류 정규화). BAT-037~041 released. 검증: 537 passed, 47 skipped, 회귀 0, ruff clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# BAT-045 Verification
|
||||
|
||||
- Status: confirmed
|
||||
- Batch: BAT-045
|
||||
|
||||
## Acceptance Mapping
|
||||
- REQ-084 (구조화 로깅 기반):
|
||||
- AC-1 (ISO8601 KST+레벨+메시지): `TestTextFormatter::test_has_iso8601_kst_timestamp_level_and_msg` ✅
|
||||
- AC-2 (json 유효+필수 키): `TestJsonFormatter::test_is_valid_json_with_required_keys` ✅
|
||||
- AC-3 (text 기본): `TestConfigureAndContext::test_configure_text_default` ✅
|
||||
- AC-4 (cid 포함): `test_includes_correlation_id_when_set`·`test_correlation_id_propagates` ✅
|
||||
- AC-5 (cid 미설정 안전): `test_omits_cid_when_unset`·json 빈 cid ✅
|
||||
- AC-6 (KST 고정): `+09:00` 검증(text/json) ✅
|
||||
- REQ-085 (주문 결과 로깅):
|
||||
- AC-1 (order_submit 키): `TestOrderResultLogging::test_submit_and_fill_are_logged_with_event_keys` ✅
|
||||
- AC-2 (order_fill 가격/수량/fee/tax): 동 테스트(`fee=1.5`) ✅
|
||||
- AC-3 (order_reject 사유): `test_reject_is_logged_at_error_level` ✅
|
||||
- AC-4 (json 구조화 필드): `JsonFormatter` extra 필드 테스트 + 라인 키 ✅
|
||||
- AC-5 (grep 전수 추출): `event=order_reject`/`event=order_submit` 안정 키 ✅
|
||||
- AC-6 (submit→fill 동일 cid): `get_correlation_id()==slot_id` 검증 ✅
|
||||
- REQ-087 (거부 ERROR 가시성):
|
||||
- AC-1·2 (매수/매도 거부 ERROR): `test_reject_is_logged_at_error_level`(dispatch) + poll terminal_reject ERROR 경로 ✅
|
||||
- AC-3 (정상 체결 비-ERROR): `test_normal_fill_emits_no_error` ✅
|
||||
- AC-4 (json level=ERROR): JsonFormatter level 키 ✅
|
||||
- AC-5 (반복 거부 가시화): reject 라인 event 키 grep ✅
|
||||
- AC-6 (알림 채널 미호출): 본 구현은 로그까지만(전송 채널 코드 없음, OQ-3 Deferred) ✅
|
||||
|
||||
## Evidence
|
||||
- Test:
|
||||
- `pytest tests/runtime/test_logging_setup.py tests/application/test_execution_policy.py -q` → **35 passed**.
|
||||
- 전체 `pytest -q` → **529 passed, 47 skipped**, 회귀 0.
|
||||
- `ruff check` → All checks passed.
|
||||
- Manual:
|
||||
- text/json 포맷·KST 타임스탬프·correlation id·거부 ERROR 출력 단위 검증.
|
||||
- Logs:
|
||||
- 실 데몬/Loki 적재 검증은 release 운영 단계 위임(코드는 JSON stdout 보장).
|
||||
|
||||
## Result
|
||||
- Ready for Release: true
|
||||
- Blocking Issues:
|
||||
- 없음
|
||||
Reference in New Issue
Block a user