5.9 KiB
5.9 KiB
id, status, discovery, criteria
| id | status | discovery | criteria | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| req-0006 | approved | dcy-0006 |
|
명시 venue 기반 주문 실행 계약
Objective
buy/sell intent의 venue 누락과 explicit null을 SOR로 정규화하고 caller가 명시한 KRX/NXT/SOR를 original order venue로 보존한다. AUTO와 wall-clock venue routing을 runtime·persistence 계약에서 제거하며 기존 AUTO row를 SOR로 전환한다. SOR 원주문 venue와 broker-authoritative actual execution venue를 분리해 submit·ack·cancel·fill polling·restart·ledger/outbox 전 과정에서 routing provenance와 실제 체결 거래소를 각각 정확하게 보존한다.
Scope
- buy/sell intent의 venue가 누락되거나 explicit null이면
SOR를 사용하고 KIS submit request에EXCG_ID_DVSN_CD="SOR"를 명시한다. - caller가
KRX,NXT,SOR를 명시하면 admission, slot persistence, KIS submit, acknowledgement, restart lookup와 cancel에서 변경하지 않는다. AUTOintent는 slot transition과 broker submission 전에invalid_venue로 거부한다. runtime source·설정·문서는 AUTO를 생성하거나 허용하지 않고, negative tests와 migration history만 폐기 계약을 언급할 수 있다.- core는 wall-clock time 또는 session 추정으로 KRX/NXT를 선택하지 않는다.
- existing persisted AUTO slot/outbox row를 SOR로 idempotent하게 전환하고 이후 invalid venue 저장을 DB constraint로 차단한다.
- original
order_venue는 KRX/NXT/SOR이며 submit·ack·slot·restart·cancel routing authority다. - actual
execution_venue는 broker-authoritative KRX/NXT 또는 미확정 NULL이다. KISORD_EXG_GB와 explicit exchange-id allowlist에서만 결정하여 fill·ledger/outbox에 별도로 기록한다. - SOR 단독, 누락, unknown code 또는 time으로 actual venue를 추론하지 않는다. SOR 주문에서 actual이 확인되지 않으면 거짓 ledger actual을 만들지 않는다.
- historical outbox의 SOR는
order_venue=SOR, actualvenue=NULL로 보존한다. NULL-only backfill로 migration replay가 정상 order/execution 조합을 재해석하지 않게 한다. - omitted와 explicit null wire input, KRX/NXT/SOR preservation, AUTO rejection, KIS payload, partial fill·cancel·restart, outbox round-trip 및 migration semantics를 repository tests와 실제 PostgreSQL에서 검증한다.
- 기존 active AC-0018과 AC-0019의 exact 의미를 변경하지 않고 이 Requirement의 구현 evidence를 해당 criterion에
satisfy로 결속한다.
Constraints
- actual venue, terminal execution state 또는 broker acceptance를 wall-clock이나 default로 추론하지 않는다.
- cancel·restart는 stored original venue와 original order identity를 사용한다.
- KIS raw payload, credential, token 또는 connection string을 public wire·document evidence에 기록하지 않는다.
- active AC-0018과 AC-0019의 본문·status를 이 satisfy binding으로 변경하지 않는다.
- TVR session/markets 판단과 strategy policy는 변경하지 않는다.
- Normative Design Documents: 없음. 이 REQ와 만족 대상으로 결속한 active AC-0018·AC-0019가 normative specification을 소유한다.
Current Implementation Assessment
- 이 Requirement는 승인된 GitHub issue #61의 이미 완료된 local implementation을 현재 ProofLine schema에 사후 명세화한다. 과거 구현이 ProofLine delivery chronology를 따랐다는 뜻은 아니다.
- AC-0018 구현 상태: satisfied by current local implementation evidence. 누락/null intent→SOR, explicit KRX/NXT/SOR preservation, AUTO admission rejection, no wall-clock routing, persisted AUTO→SOR와 constraint가 구현·검증되었다.
- AC-0019 구현 상태: satisfied by current local implementation evidence. original order venue와 actual execution venue split, KIS fail-closed parser, cancel/restart routing provenance, ledger/outbox split, historical SOR actual NULL과 replay-safe migration이 구현·검증되었다.
- 구현 기반 commits는
15aeae6930f8c3e6ef9cf659f41278b099a78459,7366cadf03fc6002bfd01ecf0cba7c24486bb618,359ea098ff717e7f04cf4206dcbc64ad17b47755다. - issue #61 계약 문서 정합 commit은
64e4e32f9d7abf7082588b3c4c9a8c0d272762f6, explicit null regression commit은43f6fea7ac805f27fba35586af27f0090a672222다. - 구현자 검증: 비-DB focused
107 passed, omitted/null focused8 passed, disposable PostgreSQL 1624 passed, 전체1074 passed, 52 skipped, Ruff·ProofLine validate·diff check PASS. - 최초 combined focused의
1 failed, 5 errors는 stale PostgreSQL DSN connection refused로 분류했고 새 disposable PostgreSQL 16 semantic suite24 passed로 재검증했다. - 최종 독립 재QC는 omitted/null SOR normalization, broker request, ack 후 slot routing provenance를 검증하여 blocker 0, major 0, minor 0으로 PASS했다. 최종 implementation HEAD는
43f6fea7ac805f27fba35586af27f0090a672222, worktree clean이었다. - 실제 KIS 운영계좌 SOR 주문, 외부 RabbitMQ·database·portfolio-hub, push·PR·remote main·production migration·deployment·release는 수행하지 않았다.
- REQ
approved, ACactive및satisfybinding은 current specification authority와 repository-local implementation assessment를 나타낸다. delivery closure, production validation, release 또는 deployment 완료를 의미하지 않는다.
Non-Goals
- TVR session·portfolio markets gate, KRX/NXT session policy 또는 strategy intent 생성 판단 변경
- actual venue가 불명확할 때 KRX/NXT를 추정하거나 AUTO routing을 복원하는 fallback
- 실제 KIS 운영 주문·취소, live credential 또는 production broker/account 검증
- push, PR, remote main integration, image publication, production migration, deployment, GitHub Release 또는 issue closure
- 기존 active AC-0018·AC-0019의 의미 변경, 신규 중복 AC 생성 또는 ProofLine lifecycle closure 소급 주장