test(push): extend validator-parity corpus to all 16 categories (35 -> 67 cases)#310
Conversation
…> 67 cases) Every schema category now ends with >=1 parity case; every mirrored preflight check ends with >=1 valid + >=1 violation case (cli#288, WS-C.3 of tracebloc/backend#1106). New coverage, in the ticket's priority order: - object_detection (4): CheckAnnotationPairing both directions + a documented PascalVOCXMLValidator under-preview (objdet-bad-xml). - semantic_segmentation (4): CheckMaskPairing (missing mask, non-_mask name) + semseg-missing-mask-id — a PIN-SCOPED divergence: the CLI previews the backend#816 mask_id contract, but the pinned ingestor (7b4ecac, di#359) predates di#358's MaskIdColumnValidator, so its preflight accepts. Flip to reject/reject at the cli#286 pin bump. - keypoint_detection (3): happy path (Annotation/Visibility JSON), kp-res-mismatch pinning the image-family commons cover keypoint too, + a documented KeypointAnnotationValidator under-preview. - text formats (13): token_classification (BIO ok / missing label column / bad-tag under-preview), sentence_pair_classification (ok+value-parity / uniform-label / malformed-pair under-preview), mlm, clm, seq2seq, embeddings happy paths + emb-malformed and mlm-missing-files (IngestableRecords file cross-check has no text mirror), text-clf-label-uniform. - tabular_regression / TSF / TTE (8): happy paths, tabreg-label-uniform as an over-reject guard (no diversity gate for regression on either side), tabreg-label-missing (the read-time divergence twin), and documented under-previews: TSF global time order, TSF fixed-timestamp schema rule, TTE negative-time. Goldens regenerated from the REAL ingestor validators at the pinned ref (scripts/gen-validator-goldens.py; existing 35 entries byte-identical). runGoPreflight now populates LocalLayout.Sidecars (annotations/, masks/, texts/, sequences/) the way production Discover does — without it the object_detection/semseg pairing previews would see an empty sidecar set. Fixes #288 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
👋 Heads-up — Code review queue is at 50 / 30 Above the WIP limit. The team convention is to review existing PRs before opening new work. Open PRs currently in Code review (oldest first):
Pull from review before opening new work. (This is a nudge from the kanban WIP check, not a block.) |
|
@BugBot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit a716a89. Configure here.
|
@BugBot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit a716a89. Configure here.
saadqbal
left a comment
There was a problem hiding this comment.
👍 Good corpus expansion to all 16 categories. The harness cross-checks declared ingestor_verdict ↔ goldens.json ↔ CLI verdict per case (67, all green), so it's internally consistent. One heads-up: the goldens authenticity gate (goldens-drift, #308) isn't on this branch — worth confirming that job stays green over these new cases once both #308 and this land on develop, since that's what actually re-derives the goldens from the real validators. (Stacked on #305.)
|
Status: no code issue — the approval was dismissed when the base retargeted to develop after #305 merged ( |
Extends the validator-parity corpus (backend#828 P3 harness) from 35 to 67 cases: every one of the 16 schema categories now ends with ≥1 parity case, and every mirrored Go preflight check ends with ≥1 valid + ≥1 violation case. WS-C.3 of the epic tracebloc/backend#1106.
Fixes #288
What's covered (ticket priority order)
Tier 1 — mirrors existed with zero cases:
CheckAnnotationPairingin both directions (image w/o annotation, orphan annotation) + happy path;objdet-bad-xmldocuments the PascalVOCXMLValidator under-preview (in-cluster reject, no CLI mirror).CheckMaskPairing(missing mask, non-_maskname) + happy path;semseg-missing-mask-idis a pin-scoped divergence — the CLI previews the backend#816 mask_id contract (CheckMaskIdColumn), but the pinned ingestor ref (7b4ecac, the di#359 merge) predates di#358's MaskIdColumnValidator, so the REAL pinned preflight accepts. The case note says to flip it to reject/reject at the cli#286 pin bump; the goldens regen will flag exactly this case.kp-res-mismatchpinning that the image-family common mirrors (ValidateImages) cover keypoint too,kp-bad-annotationdocumenting the KeypointAnnotationValidator under-preview.Tier 2 — the 7 text formats (13 new): token_classification (BIO ok w/ value-parity, missing label column, bad-tag under-preview), sentence_pair_classification (ok w/ value-parity, uniform-label diversity reject, malformed-pair under-preview), mlm / clm / seq2seq / embeddings happy paths,
emb-malformed,mlm-missing-files(IngestableRecords' referenced-file cross-check has no text-family CLI mirror),text-clf-label-uniform.Tier 3 — tabular_regression / TSF / TTE (8 new): happy paths;
tabreg-label-uniformas an over-reject guard (regression must NOT hit the diversity gate on either side);tabreg-label-missing(the read-time divergence twin oftabular-label-missing); documented under-previews for TSF global time order, TSF's fixed-timestampschema rule, and TTE's negative-time rule.The accept/reject under-previews above are honest documentation of preview gaps (same pattern as
imgc-missing-file), each flagged in its manifest note as a candidate future mirror.Harness change (one, surgical)
runGoPreflightinparity_golden_test.gonow populatesLocalLayout.Sidecars(annotations/,masks/,texts/,sequences/) the way productionDiscoverdoes — without it the object_detection/semseg pairing previews see an empty sidecar set and reject every case. No production code touched.Deviation from the ticket text
The ticket estimated ~45 cases; full per-violation-class coverage of the three zero-case mirrors plus the text/tabular tiers landed at 67. All 32 new cases are included in this one PR — no follow-up remainder.
What ran locally
scripts/gen-validator-goldens.pyagainst the pinned data-ingestors ref7b4ecac(extracted viagit archive, venv with pandas/Pillow/sqlalchemy/ijson/requests/tenacity/tqdm): all 67 verdicts match the manifest; the existing 35 golden entries are byte-identical (zero drift).scripts/sync-validator-goldens.sh --check→ "validator goldens in sync".go test ./internal/push/ -run TestValidatorParity -v→ 67/67 subtests pass (incl. value-parity for token-clf-ok / sentpair-ok).go test ./...,go build ./...,gofmt -l,go vet→ all green.Rebase expectation
Based on
origin/developwith the current pin —fix/286-pin-bumpdid not exist on origin at branch time. When the cli#286 pin-bump PR lands, this corpus needs one deliberate follow-up on rebase: regenerate the goldens at the new pin and flipsemseg-missing-mask-idto reject/reject (its note spells this out). Merge order is otherwise flexible; no shared-file conflicts expected with sibling PRs (this PR touches only the parity corpus + its test harness).🤖 Generated with Claude Code
Note
Low Risk
Test-only changes (parity manifest, fixtures, and golden harness helper); no production push/preflight behavior is modified.
Overview
Grows the validator-parity harness from 35 to 67 cases so every schema category has at least one fixture and mirrored Go preflight checks get both pass and fail examples. New coverage spans object_detection / semantic_segmentation pairing (annotations, masks,
mask_id), keypoint_detection, the remaining text task types, and tabular_regression / time_series_forecasting / time_to_event_prediction, with manifest notes for deliberate CLI vs ingestor divergences and documented under-previews.The only harness code change is
listSidecarsinparity_golden_test.go, which fillsLocalLayout.Sidecarsfrom case directories (annotations/,masks/,texts/,sequences/) like production Discover—fixing false rejects on OD/semseg pairing tests (cli#288).goldens.jsonis regenerated for the new cases; production preflight logic is unchanged.Reviewed by Cursor Bugbot for commit a716a89. Bugbot is set up for automated code reviews on this repo. Configure here.