운영자 배포 증거 기반 운영 환류 기록: Feedback Handoff(관찰 사실 + Discovery/REQ/Change Request Input 분리), REL-004 confirmed→feedback-captured, 포함 BAT-014~023 release-candidate→released(register + 개별 index). 후속 입력: issue #16(preallocation 누락, Discovery), dcy-019(REQ 대기), BAT-024(차기 release 편입), daily_symbol_entries 제거(REQ-002 change-req). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.9 KiB
2.9 KiB
BAT-017: KIS 외부 취소 감지 + 부분 체결 회계 + pending stale 워치독 (issue #9)
- Status: released
- Profile: standard
- Source Discovery: dcy-013
- Included REQ: REQ-012 (CHG-20260608-01), REQ-013 (CHG-20260608-02), REQ-018 (CHG-20260608-02), REQ-031 (CHG-20260608-01), REQ-014 (CHG-20260608-01), REQ-015 (CHG-20260608-02)
Summary
- dcy-013(KIS 외부 주문 취소 시 슬롯이 pending_sell 에 영구 갇힘 — cncl_yn 미파싱, issue #9)을 단일 standard batch 로 delivery 한다. 거버넌스는 dcy-013 OQ-3 결정대로 전부 change-req, 신규 REQ 없음(워치독 임계 env 는 REQ-014 에 흡수).
- 핵심: KIS
poll_fill이inquire-daily-ccld의cncl_yn="Y"를 파싱해 외부 취소를 감지한다. 체결 0 취소 →cancelled(기존 롤백 경로로 holding 자동 복구), 부분 체결 후 취소 →is_partial_cancel(체결분 원장 1회 + qty 차감 + 잔여 holding 복귀, OQ-1 A안). 보강책으로 pending 주문 stale 워치독(OQ-2 Alert-only: WARN+카운터, 상태 미변경).
Scope
- In Scope:
- KIS
poll_fill의cncl_yn파싱 +cancelled/partial-cancel 매핑,FillStatus.cancelled/is_partial_cancel(REQ-012) - 집행 루프 부분 체결 회계
_on_partial_cancel(체결분 원장 + qty 차감 + holding 복귀), 전량 취소 롤백 재사용 (REQ-013) - 부분 체결분 원장 1회 기록(
_record_ledger재사용) (REQ-018) - 잔여 포지션 정합 연계(슬롯 qty ↔ 실 잔고, 과매도 방지) (REQ-031)
- pending stale 워치독 Alert-only +
TREX_PENDING_STALE_THRESHOLDenv (REQ-014) - baseline 문서(interface-contract/runtime-flows) 정합 (REQ-015)
- KIS
- Out of Scope:
- buy 경로·paper 브로커 동작 변경(paper 는 이미 취소 정상 처리)
- 매도 가격 정책(dcy-012/BAT-016 에서 처리 — 본 주기는 취소 감지만)
- 워치독 auto-remediation(타임아웃 시 자동 롤백/취소) — 정상 slow fill·지정가 대기 상호작용·KIS 취소 능력 필요로 후속 분리
- 과거 갇힘 슬롯의 일괄 보정(운영 절차)
Documents
- Planning: planning.md
- Design: design.md
- Implementation: implementation.md
- Verification: verification.md
Notes
- Source discovery 단일(dcy-013). OQ-1(A안 정확 회계)·OQ-2(워치독 Alert-only)·OQ-3(전부 change-req) Answered.
- 자동 회복 성립 근거:
FillStatus.is_terminal_reject가 이미cancelled를 포함하고_rollback이pending_sell→holding을 수행(A-2) → KIS 어댑터가 취소만 정확히 반환하면 application 경로 재사용으로 복구. - dcy-012(BAT-016) 가정 충족: holding 진입 시
limit_priceclear → 재매도 시장가(A-1). - R-1(KIS 취소 필드 규약):
cncl_yn가정. 실 응답 확인은 운영/검증 단계 — 미지 값 보수 처리 + stale 워치독(FR-3) backstop.