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

5.1 KiB

id, status, discovery, criteria
id status discovery criteria
req-0005 approved dcy-0005
create update retire satisfy
ac-0015
ac-0016
ac-0017
ac-0018
ac-0019

broker 실행 실패의 기록·상태 수렴 경계

Objective

trex-core가 broker-authoritative evidence를 기준으로 주문 실패·불명확 결과·부분체결·취소 상태를 중복 주문 없이 수렴하게 한다. core가 자동 broker retry를 생성하거나 strategy/TVR에 KIS 실패 판단을 넘기지 않도록 ownership을 제한하고, original order venue와 actual execution venue를 durable하게 분리하여 submit부터 restart·cancel·ledger/outbox까지 의미를 보존한다.

Scope

  • 명시적으로 미수락·미체결이 확인된 sell 주문은 실패 evidence를 기록하고 dispatch를 정리하며 새 broker attempt 없이 broker-authoritative 보유수량으로 pending_sell → holding 전이한다.
  • submission timeout·연결 단절·응답 누락 등 결과 불명확 상태는 durable sentinel로 보존하고 신규 주문 없이 original order lookup과 reconciliation을 우선한다.
  • core는 broker failure의 retryability, retry schedule, retry budget 또는 자동 새 broker attempt를 산출하지 않는다. 이후 별도 strategy intent는 자동 retry와 구분한다.
  • strategy/TVR 응답·이벤트에는 KIS failure, raw broker error, broker attempt와 retryability를 노출하지 않는다. strategy/TVR은 core slot snapshot만 소비한다.
  • intent venue 누락은 SOR로 정규화하고 explicit KRX/NXT/SOR를 그대로 보존한다. AUTO는 admission·broker routing·persistence에서 허용하지 않고 persisted AUTO는 SOR로 전환하며 wall-clock routing을 제거한다.
  • original order_venue는 submit, ack, slot, restart와 cancel에 KRX/NXT/SOR로 보존한다. actual execution_venue는 broker-authoritative KRX/NXT 또는 미확정 NULL이며 fill, ledger와 outbox에 별도로 기록한다.
  • KIS actual venue는 ORD_EXG_GB의 승인된 mapping과 명시 exchange-id allowlist만 사용한다. SOR, 누락, 미지원 값과 wall-clock time으로 actual KRX/NXT를 추론하지 않는다.
  • historical outbox SOR는 order_venue=SOR, actual venue=NULL로 보존한다. migration은 NULL-only backfill로 반복 적용이 안전해야 하고 정상 (actual=NXT, order=KRX) 같은 조합을 오염시키지 않아야 한다.
  • PostgreSQL은 order venue를 KRX/NXT/SOR non-null로 제한하고 actual venue를 KRX/NXT/NULL로 제한한다.
  • focused·전체 회귀, actual PostgreSQL migration·round-trip, lint와 독립 read-only QC를 verification evidence로 유지한다.

Constraints

  • broker evidence가 없는 actual venue, 체결, 미수락 또는 terminal state를 추론하지 않는다.
  • explicit order venue와 original order date·broker order identity를 restart/cancel 중 변경하지 않는다.
  • strategy/TVR에 KIS failure나 retry ownership을 추가하지 않는다.
  • live credential·token·connection string·raw sensitive payload를 문서나 외부 wire에 기록하지 않는다.
  • existing active AC-0011의 timeout/cancel reconciliation 및 AC-0013의 terminal cancellation·partial fill 계약을 완화하거나 대체하지 않는다.
  • Normative Design Documents: 없음. 이 REQ와 active AC가 normative specification을 소유한다.

Current Implementation Assessment

  • 이 specification은 승인된 GitHub issue #60과 연결된 #61을 이미 local main에서 구현·검증한 결과를 사후 정리한다. 과거 구현이 ProofLine delivery chronology를 따랐다는 뜻은 아니다.
  • 구현 revision은 15aeae6930f8c3e6ef9cf659f41278b099a78459, 7366cadf03fc6002bfd01ecf0cba7c24486bb618, 359ea098ff717e7f04cf4206dcbc64ad17b47755다.
  • 현재 구현은 명시적 sell rejection 수렴, unknown submission sentinel·lookup, strategy wire retryability 제거, SOR default·explicit venue 보존·AUTO 제거, KIS actual venue parser와 order/execution venue 분리, replay-safe migration·DB constraint를 포함한다.
  • 구현자 검증은 focused 77 passed, 전체 1074 passed, 52 skipped, disposable PostgreSQL 16 24 passed, Ruff PASS다.
  • 최종 독립 read-only QC는 actual PostgreSQL 16 probe를 포함하여 blocker/critical/major/minor finding 없이 PASS했으며 HEAD 359ea098ff717e7f04cf4206dcbc64ad17b47755와 clean worktree를 확인했다.
  • 환경 의존 KIS·RabbitMQ 검증은 skip되었고 실제 외부 system interaction은 수행하지 않았다.
  • approved REQ와 active AC는 current specification authority 및 현재 implementation assessment를 나타낸다. push, PR, 원격 main 반영, deployment, release 또는 운영 주문 완료를 뜻하지 않는다.

Non-Goals

  • strategy/TVR의 KIS failure 수신, retryability 계산, broker retry schedule·budget 또는 자동 재주문
  • TVR session·portfolio markets gate와 거래 세션 정책 구현
  • live KIS 주문·취소, 운영 broker/account/database/RabbitMQ/portfolio-hub 연결
  • push, PR, remote main merge, image publication, production migration, deployment, GitHub Release 또는 실주문
  • ProofLine delivery·release lifecycle closure의 소급 주장