Harden data pipeline against corrupted dataset uploads#570
Open
Harden data pipeline against corrupted dataset uploads#570
Conversation
4995d83 to
933427d
Compare
Checks employment_income, population counts, poverty rate, and income tax against wide bounds after each data build. Would have caught the enhanced CPS overwrite bug (PR #569) where employment_income_before_lsr was dropped, zeroing out all income and inflating poverty to 40%. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Five layers of defense against the bug class from PR #569 where a lossy sparse rebuild overwrote the enhanced CPS, dropping employment_income_before_lsr and zeroing all income: 1. Pre-upload validation gate (upload_completed_datasets.py): - File size check (enhanced CPS must be >100MB, was 14MB when bad) - H5 structure check (critical variables must exist with data) - Aggregate stats check (employment income >5T, household count 100-200M) 2. Post-generation assertions (enhanced_cps.py, small_enhanced_cps.py): - Weight validation (no NaN, no negatives, reasonable sum) - Critical variable existence checks before save - Output file size verification after write 3. CI workflow safety (reusable_test.yaml): - Upload gated on success() so test failures block upload - Pre-upload H5 validation step checks structure before upload - employment_income_before_lsr explicitly checked 4. Makefile hardening: - Sparse file swap validates existence and size before/after - New validate-data target for standalone validation 5. Comprehensive test coverage: - Sparse dataset sanity tests (employment income, household count, poverty) - Direct employment income checks in enhanced and sparse test files - File size regression test (catches the 590MB→14MB shrink) - Small ECPS employment income and household count checks Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7ef864d to
6ac6adb
Compare
The variable was named optimised_weights_dense but the actual variable from reweight() is optimised_weights. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Hardens the data pipeline with 5 layers of defense to prevent corrupted datasets from being uploaded to HuggingFace — the bug class from PR #569 where
employment_income_before_lsrwas dropped, zeroing all income and inflating poverty to 40%.Defense layers
upload_completed_datasets.py): File size, H5 structure, and aggregate stats checks run before ANY uploadenhanced_cps.py,small_enhanced_cps.py): Weight validation, critical variable checks, output file size verificationreusable_test.yaml): Upload gated onsuccess(), pre-upload H5 validation stepHow each layer would have caught PR #569's bug
employment_income_before_lsrwas emptycreate_sparse_ecps()output missing critical variablesemployment_income_before_lsrtest_ecps_employment_income_positivecatches $0 employment incomeTest plan
🤖 Generated with Claude Code