Repository navigation
Description
Reproduced public workflow
On immutable main 721adee, Python 3.14.3, Polars 1.43.2 and pandas_market_calendars 5.5.0, use real offline SyntheticProvider minute rows:
import polars as pl
from ml4t.data.providers import SyntheticProvider
from ml4t.data.sessions import SessionAssigner
with SyntheticProvider(calendar_mode="continuous") as provider:
frame = provider.fetch_ohlcv("BTCUSD", "2026-10-17", "2026-10-17", "minute")
frame = frame.filter(pl.col("timestamp").dt.strftime("%H:%M") == "12:00")
assigned = SessionAssigner.from_exchange("CME").assign_sessions(frame, bar_frequency="intraday")
print(assigned["session_date"].to_list())Actual result is [None]; this open Saturday observation belongs to the Monday October 19 CME business trade date. Completion of actual 12:00/12:02 UTC provider rows through SessionCompleter("CME Globex Crypto") raises an outside-template error instead of retaining the observations and filling the single open minute. Data does not silently delete those input rows: assignment retains null labels and completion rejects its invalid template.
The retained 17-case producer/assignment/completion baseline has nine failures and eight passing controls, covering post-cutover weekends, weekday reopening, launch-day reopening, DST and holiday trade dates. Pre-cutover closure, maintenance, spot 24/7 civil-date behavior and explicit calendar=None controls are distinct. No acquisition, calendar or completion mocks and no paid API/credentials.
Authoritative schedule and required repair
- CME cryptocurrency FAQ distinguishes Globex maintenance, business trade dates and excluded spot-quoted futures. Globex maintenance is weekdays 16:00-16:02 Chicago time and Saturday 02:00-04:00; do not substitute ClearPort hours.
- May 2026 electronic-trading notice identifies the May 29 transition.
- CME migration material distinguishes calendar dates from following business trade dates. The CME client migration notice specifies launch-day maintenance through 16:30 Chicago time; ordinary weekday two-minute maintenance is not sufficient for that date.
Preserve historical sessions before the transition. Implement the selected CME crypto schedule, correct business labels, maintenance and sufficient schedule-query coverage in native assignment/completion and downstream schedule consumers. Do not apply these hours to other CME products or equate CME trade dates with ordinary spot 24/7 civil-day sessions. Reuse shared FeedSpec selection, explicit calendar > metadata > NYSE; explicit None remains disabled. Any business-holiday backend must be qualified against exchange rules, not assumed correct from its name.
Retain original observations, validate boundaries and original volume/price values, fill only real open missing minutes, and preserve existing outside-session policy/custom-calendar behavior. Reuse one focused issue/PR and require failing-base/passing-fix public workflows and complete supported quality gates. AI-assisted maintenance under owner direction. No new release, deployment, client dataset rewrite or credential authority.
Activity
fix: honor CME crypto cutover and business trade dates (ml4t#111)