Files
trex-core/.proofline/lines/line-0003/req-0003.md
T

4.2 KiB

id, status, discovery, criteria
id status discovery criteria
req-0003 approved dcy-0003
create update retire satisfy
ac-0009
ac-0010
ac-0011
ac-0012
ac-0013

주문 기본 timeout 상한과 장마감 자동취소·부분체결 reconciliation

Objective

모든 매수·매도 주문에 최대 3,600초의 실행 timeout을 적용하고, timeout 이후에도 KIS의 authoritative 주문 상태가 확인될 때까지 슬롯을 fail-closed로 보호한다. 원주문 시각·주문일을 영속화하여 날짜 rollover와 daemon 재시작 뒤에도 동일 주문을 재조정하며, 장마감 자동취소와 무체결·부분체결·전량체결 경합을 슬롯 및 ledger에 멱등하게 반영한다.

Scope

  • 매수·매도 intent의 timeout 생략 또는 null, 인스턴스 기본값 override, 전략·설정 입력 경계와 주문 제출 전 거부를 정의한다.
  • effective timeout, immutable 주문 제출 시각과 KST 원주문 날짜를 슬롯 저장소에 영속화하고 in-memory/PostgreSQL 구현 및 migration의 동작을 일치시킨다.
  • timeout을 슬롯 terminal 전이가 아닌 취소/reconciliation 시작 조건으로 사용하고, 원주문 날짜를 사용하는 KIS 주문조회를 terminal authority로 유지한다.
  • 취소 REQUESTED, REJECTED, UNKNOWN과 주문 row 미가시성을 nonterminal로 처리하며, open 주문 evidence가 있을 때만 제한된 취소 재시도를 허용한다.
  • 미확정 주문은 pending 상태로 유지하고 sanitized CRITICAL alarm을 중복 폭주 없이 발행하며, daemon 재시작 뒤 reconciliation을 계속한다.
  • KIS 장마감 자동취소의 무체결·부분체결·전량체결 경합을 broker 잔고와 deterministic execution identity에 따라 슬롯 및 ledger에 반영한다.
  • repository-local synthetic KIS fixture와 application·adapter·persistence 회귀 테스트로 매수·매도, 날짜 rollover, 재시작, visibility grace, retry와 멱등성을 검증한다.

Constraints

  • timeout은 1..3600의 strict integer만 허용하며 범위 밖 또는 다른 타입을 clamp하거나 묵시적으로 변환하지 않는다.
  • KIS cancel 응답이나 로컬 시간 경과만으로 체결·취소·보유량 0 또는 슬롯 재사용 가능 상태를 추론하지 않는다.
  • legacy pending row에 authoritative 원주문 metadata가 없으면 현재 날짜를 추정하지 않고 네트워크 조회·terminal 전이·cancel·ledger 기록을 차단한다.
  • account, token, credential, connection string, raw KIS payload와 exception 본문 등 민감하거나 비허용인 값을 alarm·로그·fixture·evidence에 포함하지 않는다.
  • portfolio-hub, strategy daemon 및 다른 TREX 서비스의 wire/HTTP 계약을 변경하지 않는다.

Current Implementation Assessment

  • 이 문서는 이미 구현된 GitHub issue #58을 현재 ProofLine schema에 사후 명세화한 것이다. 이는 과거 구현이 ProofLine delivery chronology를 따랐다는 뜻이 아니다.
  • 현재 구현 기준은 local commit 843df1d6f1a642282039a57d0de4ca85204d6bee이며, issue evidence에는 전체 1,040 passed, 51 skipped, 독립 read-only QC PASS가 기록되어 있다.
  • 환경 의존 PostgreSQL 41건, RabbitMQ 9건, KIS sandbox 1건은 설정·credential 부재로 skip되었다. 이는 active AC의 규범적 상태와 별개인 비차단 검증 공백이다.
  • 이 REQ의 approved와 AC의 active는 현재 specification authority를 나타내며 push, PR, main 반영, deployment, release 또는 formal lifecycle closure를 의미하지 않는다.

Non-Goals

  • KIS 거래소의 주문 유효기간·장마감 자동취소 정책 변경
  • 전략의 매수·매도 조건, 가격·slippage·주문수량 정책 변경
  • portfolio-hub ledger schema 또는 다른 TREX 서비스 계약 변경
  • 운영계좌 실제 주문·취소, 운영 데이터 수정 또는 기존 pending 슬롯의 자동 사후 정리
  • issue #45의 KIS account snapshot fallback 및 장 시작 REST 장애 복구
  • terminal broker evidence 없는 유예시간 기반 강제 슬롯 해제
  • timeout 범위 밖 값을 clamp하는 호환 동작
  • push, PR, main 반영, 배포, release 또는 lifecycle closure