Skip to content

fix: honor shared calendar declarations throughout validation #108

Closed

Description

@stefan-jansen

Reproduced public workflows

On immutable main 721adee, Python 3.14.3 and Polars 1.43.2, real SyntheticProvider frames expose six failures through existing public validation calls:

  • AssetValidator rejects valid July 7-11 daily equity provider labels as five after-hours points because it treats labels as clock instants.
  • CrossValidator reports the valid July 7 13:30 UTC NYSE opening minute as outside market hours, but accepts July 3 17:01 UTC after the early close and July 4 15:00 UTC during the holiday closure.
  • CrossValidator.validate(frame, calendar=None) still reports weekend rules on actual Saturday provider rows because it ignores the explicit disable.
  • CryptoSessionValidator(calendar=None) reinstates CryptoCalendar and reports a missing daily observation instead of disabling schedule-derived validation.

The six public-workflow regressions fail cleanly under the repository's ordinary offline/resource-warning fixtures. These are observed validation outputs and ignored existing kwargs/None arguments, not a test that only fails on an unsupported new keyword. Input rows come from SyntheticProvider; no copied calendar logic or validation mocks.

Required behavior and compatibility

Apply the accepted shared calendar policy throughout time-aware validation: explicit calendar, then declared feed metadata, then NYSE; explicit None disables calendar-derived checks but does not disable schema, price, volume or other non-calendar validation. Continuous crypto feeds declare 24/7. Descriptive asset/exchange identity must not override a selected calendar.

Reuse shared FeedSpec resolution and native authoritative session interpretation, including daily labels versus instants, declared timezone, DST, overnight sessions, early closes, holidays, breaks and custom schedules. Calendar membership and missing-bar completeness are different checks; an intraday calendar alone does not define a bar grid. Do not replace every validator with another independent clock/weekend resolver.

Carry the declaration and frequency through DataManager ingestion/update validation, not only direct validator construction. Preserve explicit per-check opt-outs and existing numerical checks. Retain supported positional APIs and define/document compatibility for explicit legacy CryptoCalendar objects or is_crypto hints without allowing them to defeat explicit canonical selection or disabled state. Invalid/incompatible declarations must fail clearly without modifying inputs or persisted generations.

Expand the real public regressions across direct validators and the actual metadata/provider/storage boundary, retain positive controls, then require complete applicable quality gates and focused base/fix evidence. Keep the already merged Friday and false-weekend repairs intact. AI-assisted maintenance under owner direction. No new release, deployment or credential authority.

Activity

  1. added a commit that references this issue on Oct 20, 2026
    a9a9084
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions