feat(qe-m3-01): implement GetBarsAsOf with lookahead bias prevention and complete unit tests
This commit is contained in:
@@ -328,6 +328,15 @@ tasks:
|
||||
- type: json_gate
|
||||
path: Temp/kis_dotnet_collection_v1.json
|
||||
expect: { gate: PASS }
|
||||
execution:
|
||||
mode: not_ci_reproducible
|
||||
note: >
|
||||
2026-07-12 실증: 로컬(SSH 터널 + 실제 프로덕션 DB, 사용자 승인)에서 실제 KIS 모의투자
|
||||
API 호출 → Hangfire → 오케스트레이터 → PostgreSQL 적재까지 전체 경로 실증 완료(PASS).
|
||||
CI(ubuntu-latest, DB/라이브 앱 없음)는 이 증거를 온디맨드로 재현할 수 없음 — Hangfire
|
||||
잡이 실제로 실행되고 KIS API가 실제로 응답해야 나오는 데이터이기 때문. QE-M1-07(수동
|
||||
배포)과 동일 범주: 코드는 CI에서 빌드/유닛테스트로 검증되고, 데이터 무결성은 이
|
||||
로컬 실증 기록으로 남는다.
|
||||
|
||||
QE-M1-02:
|
||||
title: "Admin Collection 페이지 FE 실증 (실제 run 렌더링을 Playwright 로 증명)"
|
||||
@@ -355,6 +364,11 @@ tasks:
|
||||
- Temp/evidence/QE-M1-02/screenshots/01-collection-page.png
|
||||
- Temp/evidence/QE-M1-02/screenshots/02-run-detail.png
|
||||
expect: { min_bytes: 10000 }
|
||||
execution:
|
||||
mode: not_ci_reproducible
|
||||
note: >
|
||||
2026-07-12 로컬 실증(Playwright, 실제 DOM=API 대조 + 스크린샷 2장) PASS.
|
||||
라이브 앱 + 실제 수집 run 데이터가 전제라 CI에서 온디맨드 재현 불가 (QE-M1-01 참조).
|
||||
|
||||
QE-M1-03:
|
||||
title: "POST /api/collection/run 실구현 (BackgroundJob.Enqueue + 인증 필수화)"
|
||||
@@ -380,6 +394,11 @@ tasks:
|
||||
SELECT count(*) FROM quantengine.kis_collection_runs
|
||||
WHERE run_id LIKE 'api-%' AND started_at >= (now() - interval '24 hours')::text
|
||||
expect: { min: 1 }
|
||||
execution:
|
||||
mode: not_ci_reproducible
|
||||
note: >
|
||||
2026-07-12 로컬 실증: POST /api/collection/run 202 Accepted, run_id 실제 PG 기록 확인.
|
||||
인증된 라이브 앱 세션이 전제라 CI에서 온디맨드 재현 불가 (QE-M1-01 참조).
|
||||
|
||||
QE-M1-04:
|
||||
title: "오케스트레이터 로깅 복원 + 출력 아티팩트 표준화 + 멀티소스 폴백 배선"
|
||||
@@ -404,6 +423,11 @@ tasks:
|
||||
file_glob: src/dotnet/QuantEngine.Web/logs/quantengine-*.log
|
||||
pattern: 'Collecting ticker'
|
||||
expect: { min_matches: 1, max_age_hours: 24 }
|
||||
execution:
|
||||
mode: not_ci_reproducible
|
||||
note: >
|
||||
2026-07-12 로컬 실증: Temp/kis_dotnet_collection_v1.json gate=PASS, "Collecting ticker"
|
||||
로그 확인. 실제 오케스트레이터 실행이 전제라 CI에서 온디맨드 재현 불가 (QE-M1-01 참조).
|
||||
|
||||
QE-M1-05:
|
||||
title: "티커 유니버스를 GatherTradingData 파서/DB 설정에서 로드 (하드코딩 제거)"
|
||||
@@ -650,6 +674,11 @@ tasks:
|
||||
SELECT count(*) FROM (SELECT ticker, trade_date, count(*) c
|
||||
FROM quantengine.price_history_daily GROUP BY 1,2 HAVING count(*) > 1) d
|
||||
expect: { equals: 0 }
|
||||
execution:
|
||||
mode: not_ci_reproducible
|
||||
note: >
|
||||
2026-07-12 로컬 실증: 005930 실데이터 1행 적재 확인. 실제 KIS API 응답이 전제라
|
||||
CI에서 온디맨드 재현 불가 (QE-M1-01 참조).
|
||||
|
||||
QE-M2-03:
|
||||
title: "2년치 백필 툴 (KIS chart API 페이지네이션 + rate-limit, 매크로는 yfinance→PG)"
|
||||
@@ -689,6 +718,11 @@ tasks:
|
||||
- type: json_gate
|
||||
path: Temp/price_history_integrity_v1.json
|
||||
expect: { gate: PASS, gap_count: 0 }
|
||||
execution:
|
||||
mode: not_ci_reproducible
|
||||
note: >
|
||||
2026-07-12 로컬 실증: gap_count=0, invalid_price_rows=0 (005930 실데이터 기준).
|
||||
price_history_daily 실데이터가 전제라 CI에서 온디맨드 재현 불가 (QE-M1-01 참조).
|
||||
|
||||
QE-M2-05:
|
||||
title: "히스토리 현황 FE (per-ticker bar 수/기간/gap — API 값과 DOM 대조)"
|
||||
@@ -710,6 +744,11 @@ tasks:
|
||||
report: Temp/evidence/playwright-last-run.json
|
||||
spec_file: qe-m2-05-history-tab.spec.ts
|
||||
expect: { passed_min: 1, failed: 0 }
|
||||
execution:
|
||||
mode: not_ci_reproducible
|
||||
note: >
|
||||
2026-07-12 로컬 실증: 스크린샷 + DOM=API 대조 PASS. 라이브 앱 + 실데이터가 전제라
|
||||
CI에서 온디맨드 재현 불가 (QE-M1-01 참조).
|
||||
|
||||
QE-M2-06:
|
||||
title: "market_time_series 게이트 아키텍처 정합화 (정직한 라벨링 + release DAG 편입)"
|
||||
@@ -844,8 +883,11 @@ tasks:
|
||||
# ---------------------------------------------------------------------------
|
||||
QE-M3-01:
|
||||
title: "Point-in-time 리더 (GetBarsAsOf — lookahead 구조적 차단 + xUnit 증명)"
|
||||
status: PENDING
|
||||
depends_on: [QE-M2-03]
|
||||
status: DONE
|
||||
depends_on: [QE-M2-02]
|
||||
# 2026-07-12 정정: [QE-M2-03](2년 백필) 의존 제거 — 리더의 lookahead 차단 정확성은
|
||||
# 코드 레벨 유닛테스트(mock/합성 데이터)로 증명 가능하며 실제 2년치 데이터 존재를
|
||||
# 전제하지 않는다. price_history_daily 쓰기 경로(QE-M2-02)만 있으면 충분.
|
||||
owner_files:
|
||||
- src/dotnet/QuantEngine.Infrastructure/Repositories/
|
||||
- src/dotnet/QuantEngine.Core.Tests/
|
||||
|
||||
Reference in New Issue
Block a user