Skip to content

Measure household_weight from typed frame weights in the parity universe#428

Merged
MaxGhenis merged 1 commit into
mainfrom
household-weight-calibration-owned
Jul 14, 2026
Merged

Measure household_weight from typed frame weights in the parity universe#428
MaxGhenis merged 1 commit into
mainfrom
household-weight-calibration-owned

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Build M sparse attempt 4 cleared the entire take-up battery, then failed the eCPS parity gate: household_weight: reference populates 22.6% of records, candidate is all-zero.

Not a data defect — an asymmetry between two gates. Frame weights are typed pipeline state, not a table column; the H5 export adapter materializes them as household_weight on write, and the input-coverage gate explicitly mirrors that (release_input_coverage.py: "Mirror that export behavior here so the gate covers what is persisted"). The parity share computation (us_nonzero_shares) never got the same mirror, so it read the deliberately absent column as an all-zero layer — while the retired reference, being a finished export, carries it populated. The entry came in with #399's 158-column expansion; Build J's 65-entry reference predates it.

Fix: apply the identical mirror in us_nonzero_shares (typed household weights measured as the household_weight layer; a real table column still wins when present). The core parity_gate is binary (reference-populated ⇒ candidate-nonzero), so no reference or exemption-register change is needed — an exemption was in fact rejected by the sync guard, correctly: restored inputs can't be fenced, they have to be measured right.

Verification: mirror test fails pre-fix and passes post-fix; table-column-precedence test; nonzero-shares + parity-reference + input-coverage suites all green; CI-ruff and format clean.

Fixes #427.

🤖 Generated with Claude Code

Build M's sparse run failed the eCPS parity gate on household_weight:
the reference (a finished export) carries the calibrated weight column
at 22.6% nonzero share, while the candidate keeps weights as typed
pipeline state and us_nonzero_shares read the deliberately absent
table column as an all-zero layer. The coverage gate already mirrors
the H5 adapter (which materializes the typed vector as
household_weight on write); the parity share computation now applies
the same mirror, so both gates and the export tell one story. A table
column still wins when present. The check entered the parity reference
with #399's 158-column expansion — Build J's 65-entry reference
predates it, so this was another first-full-scale exercise.

Fixes #427.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis merged commit b58ea2a into main Jul 14, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

household_weight is calibration-owned: input-parity classification

1 participant