BAT-053 스캐폴드에서 연기된 양의 경로 완성: - KISBroker.reinitialize(credential): app_key/app_secret/account_ref 교체 + L1 token 무효화 - SnapshotScheduler에 kis_reinit_callback 주입 지점 추가; 그날-시작 성공 시 callback 호출 - daemon.py에 _build_kis_reinit_callback() 헬퍼 + SnapshotScheduler 조립 수정 - 신규 테스트 12개 추가: 757 passed / 47 skipped (기존 745 대비 +12, 회귀 0) 안전 불변식 유지: - credential_fetch_enabled=False(기본) 경로 byte-for-byte 보존 - fail-closed 불변식 미파괴 (reinit 실패 시 entry_allowed 유지) - AMQP wire 계약 변경 없음 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
3.0 KiB
3.0 KiB
BAT-054: Planning
- Status: confirmed
- Batch: BAT-054
- Profile: standard
Included REQ
- REQ-113 (Approved, 미충족 AC: AC-2 fetch→KISConfig 재조립, AC-4 break-glass 로그 assert)
- REQ-115 (Approved, 미충족 AC: AC-1 캐시 인증정보로 KIS 주문 지속)
Scope Summary
BAT-053에서 스캐폴드로 처리된 "양의 경로(positive path)"를 완성한다.
- 그날-시작 체크포인트에서 fetch 성공 시
BrokerCredentialPayload로KISConfig의app_key/app_secret/account_ref를 재조립하고 이를 실제KISBroker인스턴스에 주입한다. - 재조립 후
KISBroker는 그날 캐시된 인증정보로 장중 KIS API 호출(주문·체결 조회·토큰 갱신)을 처리한다. - portfolio-hub 장중 장애는 이미 재조립된 KISBroker 운행에 영향을 주지 않는다.
- break-glass 로그 내용 assert 테스트를 추가한다(AC-4 보강).
Task Breakdown
T1: REQ-113 AC-2 — KISBroker 재조립 callback 설계 + 구현
SnapshotScheduler에kis_reinit_callback: Optional[Callable[[BrokerCredentialPayload], None]] = None추가- 그날-시작 성공 시
_maybe_fetch_credential()에서 callback 호출 → KISBroker 재초기화 daemon.py의_build_broker()에서 KIS 브로커면 callback을 조립하여 주입
T2: REQ-115 AC-1 — KISBroker 런타임 교체 메서드
KISBroker(또는 daemon.py)에reinitialize(credential: BrokerCredentialPayload)같은 메서드 제공- 재초기화는
app_key/app_secret/account_ref만 교체;base_url/timeout/allow_live는 env 원본 유지 - KIS access token 캐시(Redis, REQ-016)는
app_key변경 시 무효화 필요
T3: REQ-113 AC-4 보강 — break-glass 로그 assert 테스트
tests/runtime/test_config.py또는tests/application/test_snapshot_scheduler.py에 AC-4 로그 content 검증 케이스 추가
Design Gate
- Design Required Before Implementation: yes
- Reason: KISBroker 재초기화 방법(메서드 추가 vs callback 교체 vs wrapper) + 재초기화 시 access token 캐시 무효화 정책이 구현 전에 명시되어야 한다. 기존
KISBroker코드를 확인 후 결정.
Dependencies
- Internal:
- BAT-053 완료(REQ-112
BrokerCredentialPayload/TradingContext구현, REQ-114 fail-closed 스캐폴드) adapters/broker/kis.py(KISBroker) — reinitialize 진입점runtime/daemon.py(_build_broker, SnapshotScheduler 조립)
- BAT-053 완료(REQ-112
- External:
- 없음 (portfolio-hub 실 연동은 스텁 기반 테스트로 커버)
Risks
- R1 (High): KISBroker 재초기화 중 진행 중인 주문 경쟁 조건 — broker 레벨 lock 또는 재초기화 안전 구간 확인 필요
- R2 (Medium): access token 캐시(Redis, REQ-016) 무효화 누락 → 구 account_ref 토큰이 신규 인증정보와 충돌
- R3 (Medium):
daemon.py에서 callback 조립 시DaemonConfig.broker == 'kis'여부 확인 — paper broker면 callback 불필요 - R4 (Low): 테스트에서 실제 KIS API를 호출하지 않도록 mock/stub 격리 유지 — KISBroker.reinitialize()는 stub BrokerPort로 테스트