# BAT-031 Planning - Status: confirmed - Batch: BAT-031 - Profile: standard ## Included REQ - REQ-066 (Interface, Approved): 사이징 도메인 수량/avg_price 재계산 + end-to-end. - REQ-067 (Documentation, Approved): baseline 4문서 정합. - REQ-057 (CHG-20260610-03, Approved): 상태머신 `holding→pending_buy` 전이. - REQ-061 (CHG-20260610-04, Approved): 사이징 intent(증액/부분 매도, 명령형 qty+price). - REQ-062 (CHG-20260610-03, Approved): 부분 매도 집행 `min(intent,잔고)`·부분 체결 실제만. ## Delivery Plan (마일스톤) 1. **M1 (REQ-057)**: `state.py` 전이 집합에 `HOLDING→PENDING_BUY` 추가(증액). test_state 갱신(13 transitions). 2. **M2 (REQ-066)**: `service.py` 전이 필드 규칙 — 증액 pending(avg_price 보존), 매수 체결 avg_price 가중평균 + 수량 = 브로커 정본 resync. 3. **M3 (REQ-061)**: `intents.py` 사이징 admission — 증액 매수(holding 슬롯 buy, `already_active` 예외)·부분 매도(SellIntent qty). messaging_handlers payload(qty/price). 4. **M4 (REQ-062)**: `execution.py` — 부분 매도 dispatch qty = `min(intent, 브로커 잔고)`, 매수/매도 체결 시 broker 정본 resync·avg 가중평균, 증액 롤백은 holding 복귀. 5. **M5 (REQ-067)**: baseline 4문서 정합 + run-the-app e2e. ## Dependencies - Internal: dcy-020(자산 영구 슬롯·REQ-062 브로커 정본·집행 루프) 전 단계 green. - External: 전략 모듈(trex-orb)이 사이징 intent 발행 — 기존 buy/sell 와 병존(additive)이라 무중단. ## Design Gate - Design Required Before Implementation: yes - Reason: M3/M4 는 **라이브 주문 집행 동작 변경**(증액 매수·부분 매도 dispatch). 증액 시 "주문 수량 vs 보유 수량" 충돌·avg_price 가중평균·증액 롤백·부분 체결 처리는 잘못 구현 시 과매수/과매도/평단 오류 → design.md 에서 확정. ## Milestones 1. M1 상태머신 + test 2. M2 service avg/qty 3. M3 intent 4. M4 execution 5. M5 baseline + e2e ## Risks - R-exec (High): 증액/부분 매도 집행 회귀(과매수·과매도·avg drift). 대응: 브로커 정본 resync(REQ-062), 멱등, 단위+paper e2e. - R-statemachine (Medium): 전이 추가 회귀. 대응: additive + test_state 회귀 가드. - R-strategy (Medium): trex-orb 계약 전환. 대응: 기존 intent 병존. ## Notes - green 기준: 단위 전체 회귀(증액/부분 매도/부분 체결/avg 가중평균) + paper run-the-app e2e + ruff.