Files
trex-core/docs/srs/Integration/req-011_broker-port-and-paper-double.md
T
genichinandClaude Opus 4.8 d60d720bc7 Add dcy-003 (confirmed) + REQ-011~015: broker execution + KIS + outbox
dcy-003 confirmed (all OQ answered, operator-confirmed scope/risk):
- OQ-1: paper/stub + real KIS Open API adapter (validated on KIS paper
  server; live account go-live config-gated, deferred).
- OQ-2: unified async fill (submit -> poll); paper is a deterministic
  async double (no synchronous shortcut) for faithful path coverage.
- OQ-3: option A — pending slot is the execution queue, broker_order_id
  is the idempotency guard; no separate outbox table (option B as a
  growth hook; intent_log stays dedup-only).
- OQ-4: dedicated background execution loop (claim -> submit -> poll ->
  reconcile); intent API only transitions to pending.

Decompose into REQ-011~015 (all Proposed): BrokerPort + paper double,
KIS adapter, execution loop, durability+reconciliation (Exception),
baseline alignment. NFR-1/2/3 absorbed. Update SRS index + dcy-003
created-REQ refs. Safety floor, KIS live account, strategy daemons, and
auth remain deferred to follow-up Discoveries.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 16:40:23 +09:00

2.8 KiB

req-011: BrokerPort 추상화 + paper/stub async 더블

  • Status: Proposed
  • Type: Integration
  • Priority: High
  • Owner: project maintainers

Intent

  • 브로커를 코어에서 추상화하는 BrokerPort 를 정의하고(불변식 B 의 단일 경계), 결정적 검증용 paper/stub 어댑터를 제공한다. 이후 KIS 어댑터(REQ-012)와 집행 루프(REQ-013)가 이 포트 위에서 동작한다.

Requirement

  • BrokerPort(application 포트)에 submit_order(side, symbol, qty, ...) -> broker_order_id, cancel_order(broker_order_id), poll_fill(broker_order_id) -> FillStatus(accepted/partially_filled/filled/rejected/cancelled, avg_price, filled_qty) 를 정의한다. paper/stub 어댑터는 동기 단축 없이 submit→poll 비동기 계약을 따르되 체결 시점·부분체결·거부를 프로그래밍 가능한 결정적 더블로 제공한다. 어댑터는 adapters 레이어에 두고 도메인은 의존하지 않는다.

Acceptance Criteria

  1. Given BrokerPort 정의, When paper 어댑터로 submit_order, Then accepted + broker_order_id 를 반환하고 즉시 filled 로 단축하지 않는다(다음 poll_fill 에서 체결).
  2. Given paper 더블의 fill 시나리오 설정(즉시/N틱 후/부분/거부), When poll_fill 반복, Then 설정대로 결정적으로 상태가 진행된다.
  3. Given 코드, When import 스윕, Then trex_core.domain.slot 은 broker/네트워크 의존이 0이고 BrokerPort 구현은 adapters 레이어에만 있다. (NFR-1/NFR-2)

Impacted Area

  • Docs: docs/interface-contract.md(브로커 경계) — REQ-015 에서 정합
  • Modules: trex_core/application(BrokerPort), trex_core/adapters/broker(paper/stub)
  • Tests: paper 더블 fill 시나리오 테스트

Notes

  • 불변식 B 의 단일 경계. KIS 어댑터는 REQ-012, 집행 루프는 REQ-013.
  • 출처: dcy-003 FR-1(포트+paper), NFR-1/NFR-2 흡수.

Change Log

CHG-20260604-01

  • Date: 2026-06-04
  • Author: Justin Ko

Change Summary

  • dcy-003 FR-1(포트+paper) 로부터 최초 생성(Proposed).

Intent

  • BrokerPort + paper async 더블 요구사항을 backlog 로 정규화.

Acceptance Criteria Delta

  • Added:
    • submit→poll 비동기 계약, 결정적 fill 시나리오, 도메인 순수성 3개 기준
  • Updated:
    • 없음
  • Removed:
    • 없음

Impacted Area Delta

  • Docs:
    • docs/interface-contract.md
  • Modules:
    • application(BrokerPort), adapters/broker(paper)
  • Tests:
    • paper 더블 시나리오 테스트

Delivery Trace Delta

  • Batches:
    • none
  • Releases:
    • none

Revalidation Impact

  • Reverification Needed: no
  • Existing Implementation Invalidated: no
  • Status Recommendation: keep-current
  • Follow-up Action: confirm-req 후 batch 편성

Validation Plan

  • paper 더블 비동기 체결 시나리오 단위테스트로 검증.