Skip to content

TSC preflight parity: mid-sequence label-flip + per-group unsorted timestamps pass local dry-run but are rejected in-cluster #218

Description

@LukasWodka

Found during FR of #216 (time_series_classification) on develop, 2026-07-10.

What

The CLI data ingest local dry-run preflight for time_series_classification does not mirror two in-cluster (data-ingestors #359 / WS1) validators, so two malformed-TSC shapes pass local preflight but are rejected in-cluster:

  1. Mid-sequence label flip — a sequence_id group whose label is not constant across its rows. In-cluster: LabelConstantWithinGroupValidator → reject. CLI local: accept.
  2. Per-group unsorted timestamps — a sequence whose timestamp rows aren't ascending. In-cluster: PerGroupTimeOrderedValidator → reject. CLI local: accept.

Verified by running the real di#359 validators at the pinned SHA c38c8ad against the parity fixtures — both reject in-cluster; the CLI's PreflightDataset only previews CheckSequenceSchemaColumns + CheckSequenceRows (null/empty group id) + the label-diversity gate, with no per-group label-constancy or time-order scan.

Cost

A customer whose CSV has either issue (realistic — e.g. unsorted-within-sequence timestamps are a common data-hygiene defect) burns a full dataset upload before the cluster rejects it. No data corruption (the cluster stays the authority; di#359 stores a sequence whole-or-nothing), and the cluster's rejection message is actionable ("sort each sequence's rows ascending and re-run") — but it defeats the dry-run's catch-early promise for TSC.

Status / context

  • Deliberate + test-locked for now: both divergences are documented in the parity cases.json as expected accept→reject mismatches, and the parity harness fails if the ingestor verdict ever flips. Same trade-off class as the pre-existing imgc-too-small case.
  • Not a regression and not a promotion blocker for feat(push): add time_series_classification category (backend#1054 WS2) #216 — filing so the gap is tracked and can be closed if burned uploads show up.

Fix

Add per-group label-constancy + per-group time-order previews to the CLI's TSC preflight to mirror LabelConstantWithinGroupValidator + PerGroupTimeOrderedValidator (bounded chunked scan, grouped by sequence_id, same messages the cluster emits). Same parity discipline as the existing preflight-parity harness.

Metadata

Metadata

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