Skip to content

H2 UK fixture: expose composition-changing person mass through the SPI support channel - #846

Merged
MaxGhenis merged 1 commit into
mainfrom
h2-fixture-spi-composition-clean
Sep 2, 2026
Merged

H2 UK fixture: expose composition-changing person mass through the SPI support channel#846
MaxGhenis merged 1 commit into
mainfrom
h2-fixture-spi-composition-clean

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Follow-up to #844, stacked on its branch (retarget to main once #844 merges).

The hermetic H2 fixture's SPI support-channel draw selected every household, and household size was aligned to region, so the expansion left weighted person mass at 282.24 → 282.24 and CI could not see the failure class #844 fixed on licensed data. Child presence now follows household_id % 5, independent of the % 4 region cadence, so the region-stratified prior allocation moves mass across household sizes: person mass 272.7 → 272.43 while household mass stays exactly 226.8.

  • tools/graph_uk_spine_fixture.py: the three-line composition change; benunit.csv, person.csv, frs_raw/benunit.tab, frs_raw/child.tab, and the descriptor digests regenerated (135 households, 162 persons; uk_spine.json unchanged).
  • test_uk_graph.py::test_spi_support_fixture_changes_person_mass_and_conserves_household_mass: runs the real root and support-channel transforms on the committed fixture and asserts person mass changes at the executor's rtol=1e-9 while household mass is conserved exactly in both the weights and the mass log, so a regeneration cannot silently lose the property.
  • With _STRUCTURAL_MASS["spi_support_channel"] temporarily set back to conserve, the fixture-backed driver test now fails with Node 'spi_support_channel' mass='conserve' changed stratum 'default': 272.7 -> 272.43 (captured in the lane report); the production declaration is untouched.

Verified here: regeneration is deterministic (rerunning the generator produces no diff), test_acceptance_h_parity.py (H2 with the engine) and test_uk_graph.py pass, ruff and tools/ci_test_groups.py --verify clean. The oracle identity is machine-local and not pinned.

@juaristi22: #835 regenerates this fixture for the 27-stage graph; after rebasing over this, rerunning tools/graph_uk_spine_fixture.py is enough.

Built by a sol lane and reproduced before push.

🤖 Generated with Claude Code

@MaxGhenis
MaxGhenis changed the base branch from fix-spi-support-channel-mass-836 to main September 2, 2026 15:37
…h the SPI support channel

The hermetic fixture's SPI draw used to select every household with
household size aligned to region, so the support-channel expansion left
weighted person mass unchanged (282.24 -> 282.24) and CI could not see
the failure class #844 fixed on licensed data. Child presence now follows
household_id % 5, independent of the % 4 region cadence, so the
region-stratified prior allocation moves mass across household sizes:
person mass 272.7 -> 272.43 while household mass stays exactly 226.8.

A regression test runs the real root and support-channel transforms on
the committed fixture and asserts both facts, so a regeneration cannot
silently lose the property. With the node declared conserve, the driver
path now fails on the fixture (captured in the lane report).

Built by a sol lane (20260902-091401-h2-fixture-composition) and
reproduced here.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the h2-fixture-spi-composition-clean branch from e786892 to ab185a6 Compare September 2, 2026 15:37
@MaxGhenis
MaxGhenis merged commit 68c2cfe into main Sep 2, 2026
23 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.

1 participant