# BAT-045 Planning - Status: confirmed - Batch: BAT-045 - Profile: standard ## Included REQ - REQ-084 (구조화 로깅 기반, Approved) - REQ-085 (주문 결과 로깅, Approved) - REQ-087 (주문 거부 ERROR 가시성, Approved) ## Delivery Plan 1. `trex_core/runtime/logging_setup.py` 신설 — KST 포맷터(text/json) + correlation id contextvar/filter + `configure_logging`(basicConfig 대체, idempotent). 2. `daemon.py`/`reset.py` 엔트리포인트에서 `configure_logging` 호출로 교체. 3. `execution.py` `_dispatch`/`_poll`/`_on_filled`에 submit/fill/reject 일관 로그(event 키) + correlation id(slot_id) 설정. 거부 라인은 ERROR 레벨(REQ-087). 4. 테스트: `tests/runtime/test_logging_setup.py`, `tests/application/test_execution_policy.py`(주문 결과 로깅 + 거부 ERROR). ## Dependencies - Internal: `execution.py`(application)가 `logging_setup`(runtime)의 `set_correlation_id` 사용 — 기존 선례(safety_sell→runtime.config) 동일 방향. domain 무의존 유지. - External: 없음. Loki 적재는 배포측 수집기(코드는 JSON stdout만, A-4 전제). ## Design Gate - Design Required Before Implementation: yes - Reason: correlation id 키 선택(slot_id), 포맷터 구조, 레이어 의존 방향, basicConfig 교체 idempotency 결정 필요. ## Milestones 1. logging_setup + 단위 테스트 green. 2. execution 주문 결과 로깅 + 거부 ERROR + 테스트 green. 3. 전체 회귀 + ruff. ## Risks - 로그 포맷 변경이 기존 caplog 기반 테스트에 영향 → 메시지 텍스트 보존, 핸들러 교체는 root만. - correlation id 단일 스레드 execution 루프에서 set-per-iteration로 충분(리셋 불요).