From 12b6eb5b33ab861d59794ff623e5313b3d88ba0f Mon Sep 17 00:00:00 2001 From: jordan Date: Wed, 29 Jul 2026 17:54:38 +0900 Subject: [PATCH] docs: record broker gap closure certification --- ...oker-uncertainty-and-adapter-retirement.md | 5 +- ...y-041-core-adapter-gap-closure-20260729.md | 52 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 docs/validation/dcy-041-core-adapter-gap-closure-20260729.md diff --git a/docs/discovery/dcy-041_20260729_broker-uncertainty-and-adapter-retirement.md b/docs/discovery/dcy-041_20260729_broker-uncertainty-and-adapter-retirement.md index b48c5f2..dd14dba 100644 --- a/docs/discovery/dcy-041_20260729_broker-uncertainty-and-adapter-retirement.md +++ b/docs/discovery/dcy-041_20260729_broker-uncertainty-and-adapter-retirement.md @@ -4,7 +4,7 @@ - 문서 ID: dcy-041_20260729_broker-uncertainty-and-adapter-retirement - 이슈명: Core 브로커 불확실 상태 구분과 로컬 KIS 어댑터 축소 - 작성 시각(KST): 2026-07-29 16:59:16 KST -- 마지막 갱신 시각(KST): 2026-07-29 17:32:04 KST +- 마지막 갱신 시각(KST): 2026-07-29 17:54:02 KST - 대체됨: 없음 - 선행 Discovery: - dcy-013_20260608_kis-external-cancel-pending-sell-stuck @@ -139,4 +139,7 @@ - KIS 현금 권위 필드: `inquire-psbl-order.output.nrcvb_buy_amt`. - 수동 혼합 보유 계정: `OwnershipAwareBroker` 투영 뒤 스냅샷을 생성하여 전략 소유 수량만 매도 허용. - 운영 기본값: 기능 OFF, 매수 600초, 매도 3600초, 갱신 300초. +- 검증: 로컬 903 passed, 격리 Docker PostgreSQL/RabbitMQ 953 passed, + 공용 가상 인증 7단계 PASS. +- 검증 문서: `docs/validation/dcy-041-core-adapter-gap-closure-20260729.md` - 실전 반영: 가상 검증과 사용자 별도 승인 전까지 미적용. diff --git a/docs/validation/dcy-041-core-adapter-gap-closure-20260729.md b/docs/validation/dcy-041-core-adapter-gap-closure-20260729.md new file mode 100644 index 0000000..2ca001d --- /dev/null +++ b/docs/validation/dcy-041-core-adapter-gap-closure-20260729.md @@ -0,0 +1,52 @@ +# dcy-041 Core broker gap closure validation + +- 검증 시각: 2026-07-29 17:54 KST +- 브랜치: `codex/core-adapter-gap-closure` +- 검증 HEAD: `611805d` +- 분류: `research_only=true`, `official_comparable=false`, + `real_order_allowed=false`, `order_adapter=virtual_locked_replay` + +## 검증 결과 + +1. 정적검사: `uv run --extra dev ruff check .` PASS. +2. 로컬 전체 회귀: `903 passed, 50 skipped`. +3. 격리 Docker PostgreSQL/RabbitMQ 전체 통합: `953 passed, 1 skipped`. +4. 공용 매매 인증 7단계: + - logic + - regression + - virtual_contract + - virtual_e2e + - fault_injection + - restart_recovery + - ledger_reconcile + - 결과: PASS +5. 인증 산출물: + `/Volumes/J_HDD/virtual_exchange/artifacts/validation/trex-core-execution/core-gap-final-20260729-1753-kst/run.json` + +## 장애 주입·재시작 판정 + +- 결과불명 주문은 동일 broker order 조회로만 수렴하고 중복 주문 0. +- timeout·운영자 취소는 `cancel_state IS NULL` 비교·설정에 성공한 한 + 호출만 전송하며 재시작 후 반복 취소 0. +- AUTO는 실제 KRX/NXT로 확정되어 주문번호와 함께 저장되고 취소·재시작에 재사용. +- 체결 후 잔량과 재시작 원장대조는 실시간 잔고만 사용. +- KIS 조회 전송 오류에만 동일 endpoint·계좌·상품·app identity의 미만료 + 스냅샷을 사용. +- 계정 2와 같은 혼합계정은 전략 소유수량만 스냅샷·매도수량에 노출. +- 신규매수 현금검사와 pending 전이는 동일 instance advisory lock 안에서 원자 처리. + +## 최초 Docker 실패와 해소 + +- 최초 실패 단계: PostgreSQL 마이그레이션 재적용. +- 최초 원인: 017 마이그레이션이 019에서 도입한 기존 `AUTO` 행을 허용하지 않아 + 반복 적용 시 check constraint 위반. +- 마지막 안전 상태: 운영 컨테이너·DB·주문 경로 미접촉, 격리 테스트 DB만 사용. +- 수정: 017 제약을 AUTO 호환으로 만들고 기존 AUTO 행이 있는 상태의 migration + replay 회귀를 추가. +- 재실행: 새 격리 DB에서 전체 마이그레이션과 953개 통합검사 PASS. + +## 실전 잠금 + +- 실전 계정·주문·운영 컨테이너 변경 없음. +- `live_dry_run`, `live_one_shot`, 서버 배포, 로컬 어댑터 제거는 미수행. +- 실전 반영은 서버 차이 검증 후 대상 계정·전략·이미지 SHA를 명시한 별도 승인 필요.