Files
trex-core/docs/batches/bat-018_20260608_trading-date-timezone-daily-preallocation/implementation.md
T
genichinandClaude Opus 4.8 0b7db66463 feat(runtime): dcy-014 trading_date KST 타임존 분리 + 일일 슬롯 preallocation (BAT-018)
데몬이 시스템 UTC 날짜로 슬롯을 1회만 preallocate 해 trading_date 가 KST 캘린더와
어긋나고 재시작 없이는 다음날 슬롯이 안 생기던 문제(issue #14) 정정.

거버넌스: 전부 change-req (신규 REQ 없음, dcy-014 OQ-3; 스케줄러는 REQ-030 패턴 준용).
- REQ-005: trading_date 를 설정 타임존(기본 Asia/Seoul) 기준 계산(timestamp 는 UTC
  유지). DailyPreallocationScheduler 신규 — TZ 일자당 1회 멱등 fire, 재시작 없이
  다음날 슬롯 자동 생성. setup() 배선 + trex-preallocation 스레드
- REQ-048: TOML trading_timezone/daily_preallocation_time 키 + from_config 전파
- REQ-009: runtime-flows/data-model 정합 + instance.example.toml

OQ-1 기본 00:00(TZ 자정, TOML 설정 가능) / OQ-2 매 캘린더일 생성(거래일 캘린더 후속).
멱등 preallocate 로 중복 tick·다중 인스턴스 중복 생성 0.

검증: 단위 302 passed/32 skipped, 인프라 게이트(PG+RabbitMQ) 334 passed, ruff clean.
신규 test_preallocation_scheduler(고정 clock) + test_instance_config 확장.
BAT-018 release-candidate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 15:39:04 +09:00

2.4 KiB

BAT-018 Implementation

  • Status: completed
  • Batch: BAT-018

구현 요약

  • dcy-014 trading_date 설정 타임존(KST) 분리 + 일일 슬롯 preallocation(issue #14)을 전부 change-req 로 구현(신규 REQ 없음; 스케줄러는 REQ-030 패턴 준용).

변경 내역

REQ-005 — 스케줄러 + 부트스트랩

  • trex_core/application/preallocation_scheduler.py(신규): DailyPreallocationScheduler — run_once()(TZ trading_date 멱등 preallocate), _maybe_tick()(TZ 일자당 1회 + 트리거 시각 게이트), run_forever(stop, tick_sec). clock 주입식(테스트 결정론).
  • trex_core/runtime/daemon.py: DailyPreallocationScheduler 인스턴스화(tz=ZoneInfo(config.trading_timezone), schedule_time=_parse_kst_time(config.daily_preallocation_time)); setup() 의 UTC 날짜 직접 preallocation → preallocation_scheduler.run_once(); _preallocation_loop + trex-preallocation 워커(8 스레드); zoneinfo.ZoneInfo import. 미사용 datetime, timezone import 제거.

REQ-048 — TOML 설정

  • trex_core/runtime/config.py: DaemonInstanceConfig 에 trading_timezone="Asia/Seoul"/daily_preallocation_time="00:00" + from_toml optional 파싱; DaemonConfig 동일 필드(기본값); from_config 가 TOML 값 전파(replace). from_env 는 기본값.
  • config/instance.example.toml: 두 키 주석 문서화.

REQ-009 — baseline 문서

  • docs/runtime-flows.md: 데몬 lifecycle TOML 키·8 스레드·setup preallocation_scheduler + 일일 슬롯 preallocation Flow 신규. Last Updated → BAT-018.
  • docs/data-model.md: trading_date=설정 TZ 기준 / timestamp=UTC 구분. Last Updated → BAT-018.

테스트

  • 신규 tests/application/test_preallocation_scheduler.py(고정 clock): 6건 — KST/UTC 자정 경계 trading_date(S-1), timestamp UTC 유지(S-2), 일자 경계 자동 생성+멱등 재tick(S-3), 설정 TZ 변경(S-4), 트리거 시각 게이팅, idle 슬롯.
  • tests/runtime/test_instance_config.py 확장: TOML 기본값(KST/00:00) + TOML 값 from_config 전파 2건.

검증 실행

  • 단위: TREX_BROKER=paper .venv/bin/python -m pytest -q → 302 passed / 32 skipped(::test_sandbox_token_and_submit deselect — LIVE .env 환경 의존, 본 batch 무관).
  • 인프라 게이트: TREX_POSTGRESQL_TEST_DSN=...(trex_core_test) TREX_RABBITMQ_TEST_URL=... pytest -q → 334 passed.
  • ruff check trex_core tests → All checks passed.