Wire the existing PaperBroker scenario knobs (fill_after_polls / qty_per_poll / reject_symbols) to daemon env so REQ-011 AC-2 e2e scenarios (delayed / partial / reject) can be reproduced by a daemon restart. Unset == prior PaperBroker() behaviour, byte-for-byte (no regression). - config.py: PaperBrokerConfig + from_env parsing (TREX_PAPER_*) - daemon.py: _build_broker injects config.paper into PaperBroker - .env.example: document the 3 paper tuning keys (paper-only, e2e) - tests: paper broker defaults + env tuning parsing SDLC: REQ-010 CHG-20260606-01 (AC-5 added) / -02 (Implemented); BAT-009 batch-lite release-candidate; REL-001 feedback handoff records pre-deployment e2e observations incl. event-publisher idle-drop and paper correlation_id collision (GitHub #4, #5). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.3 KiB
2.3 KiB
BAT-009 Planning
- Status: confirmed
- Batch: BAT-009
- Profile: batch-lite
Included REQ
- REQ-010 (Configuration): 데몬 설정 .env 로딩 — CHG-20260606-01 / AC-5 (paper 튜닝 env 노출)
Delivery Plan
runtime/config.py:PaperBrokerConfig(fill_after_polls:int=0, qty_per_poll:Optional[int]=None, reject_symbols:frozenset[str]=frozenset())추가.DaemonConfig에paper: PaperBrokerConfig필드(broker=='paper' 일 때만 참조).from_env()에서TREX_PAPER_FILL_AFTER_POLLS(int, 기본 0),TREX_PAPER_QTY_PER_POLL(빈 문자열→None),TREX_PAPER_REJECT_SYMBOLS(콤마 분리, 공백/빈 토큰 제거→frozenset) 파싱.runtime/daemon.py:_build_brokerpaper 분기를PaperBroker(fill_after_polls=..., qty_per_poll=..., reject_symbols=set(...))로 교체..env.example:TREX_BROKER=paper아래 paper 튜닝 키 3개 주석 문서화(미설정=즉시 전량 체결·거부 없음).tests/runtime/test_config_dotenv.py:_KEYS에 3개 키 추가,test_paper_broker_defaults(미설정=0/None/frozenset()),test_paper_broker_env_tuning(FILL_AFTER_POLLS=2, QTY_PER_POLL=4, REJECT_SYMBOLS="005930, 000660 ," → 2/4/{005930,000660}).
Dependencies
- Internal: REQ-011 PaperBroker(생성자 knob 이미 존재), REQ-010 dotenv 로딩 메커니즘.
- External: 없음.
Design Gate
- Design Required Before Implementation: no
- Reason: 기존 PaperBroker 생성자 인자를 config/env 표면으로 노출하는 additive wiring. 외부 인터페이스(BrokerPort)·슬롯 런타임 흐름 변경 없음. 미설정 시 기존 동작과 byte-for-byte 동일. batch-lite + design 생략(minor-change).
Milestones
- M1 — PaperBrokerConfig + from_env 파싱.
- M2 — _build_broker 주입 + .env.example 문서화.
- M3 — 단위테스트 green(기본/파싱) + ruff clean + 전체 회귀(166 pass).
- M4 — e2e 시나리오 evidence(거부 롤백
idle→pending_buy→idle, 지연+3.7s, 부분 qty 누적+2.5s).
Risks
- R-1 (Low): env 오설정이 production 데몬 동작을 바꿈. 대응: broker=='paper' 일 때만 참조(kis 경로 무시), 미설정=기본 동작,
.env.example에 "e2e 전용" 명시. - R-2 (Low): 빈 문자열/공백 토큰 파싱 edge. 대응:
qty_per_poll빈 문자열→None,reject_symbols빈/공백 토큰 제거 — 단위테스트로 고정.