Skip to content

Stacked release fix train: gate alignment, pregnancy/prior-year defects, ACS release predictor join - #805

Merged
MaxGhenis merged 54 commits into
mainfrom
stacked-release-fix-train
Aug 28, 2026
Merged

Stacked release fix train: gate alignment, pregnancy/prior-year defects, ACS release predictor join#805
MaxGhenis merged 54 commits into
mainfrom
stacked-release-fix-train

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Fixes #794. Fixes #798. Fixes #799.

Integration branch (stacked-release-fix-train) carrying the three stacked-release fix lanes that block the candidate-1 (25% stacked multispine) release, merged over current main (includes #793) with attested digests regenerated on the union tree. Supersedes #797, whose branch could not schedule CI (CONFLICTING vs #793 on main — no merge ref, so Actions never created check runs).

What's aboard

1. Stacked release gate alignment (#794 — branch stacked-release-gate-alignment)

  • Weeks-gate root cause: QRF transferred weeks values snap to the observed donor support, so gate banding no longer misreads interpolated week counts as out-of-support. The calibration hypothesis was tested and refuted — post_transfer_calibration is untouched.
  • Stacked-aware release gates: the roster of gates that assumed a single-spine pool now recognizes the stacked ASEC+ACS frame.
  • No thresholds, bands, or seeds changed.

2. Pregnancy + prior-year defects (#798, #799 — branch pregnancy-prioryear-defects)

3. ACS release-side predictor join (branch acs-predictor-release-join)

  • The release builder populates all CPS-named predictors consumed by the six archived donor models (DEAR/DEYE/DREM/DPHY/DDRS/DOUT→PEDIS*, RAC1P/HISP→PRDTRACE/PRDTHSP, OCCP→PEIOOCC/POCCU2, TEN→SPM_TENMORTSTATUS) on every physical ACS support row, via an exact release-time join to the two SHA-pinned canonical 2024 1-year ACS PUMS archives (--acs-person-zip/--acs-person-sha256/--acs-household-zip/--acs-household-sha256, required together for any ACS-bearing pool).
  • Strict hash, lineage, collision, totality, universe, and clone-fan-out contracts; no silent defaults, no model retraining, no selection changes, no gate threshold changes.

Digest regeneration (merge-train integration)

Spec identities attest source, so the union tree owns them (per this repo's re-pin doctrine): regenerated from the merged tree rather than adopting either side's pins.

  • Envelope spec_sha256: uk 2a761aea…, be 7062e38f…, us 835b4d61… (verified against the live loader; tools/spec_envelope_digests.py)
  • Seed digests: seed_map 271c23ec…, seed_protocol 870f9b43…
  • F0 coverage evidence regenerated: 42,154/42,154 configuration fields, 41/41 inventory checks
  • Loader minimal golden vector re-pinned
  • imputation.yaml pregnancy structural pin stays 3290b2dd… (= enabled=False authored identity; verified by direct computation)

Verification

  • test_us_multispine_pool_tool.py, test_spec_engine_country_bundles.py, test_spec_engine_loader.py: green
  • acspred-touched files (test_us_acs_release_predictors.py, test_us_ssi_disability_criteria.py, test_us_spine_blindness.py, test_us_fiscal_refresh_builder.py): green
  • transfer/pregnancy/prior-year/release-gate files (test_us_acs_transfer.py, test_us_pregnancy.py, test_us_prior_year_income.py, test_us_release_gate_preflight.py, test_us_stacked_spine.py, test_us_acs_local_release_tool.py, test_release_input_coverage.py, test_gates.py): green
  • ruff check .: clean; tools/ci_test_groups.py --verify: green
  • Full suite rides CI

Lane journals (PROGRESS.md, out.md) historicized with dated notes per the repo journal rule.

🤖 Generated with Claude Code

MaxGhenis and others added 22 commits August 27, 2026 14:09
…e union tree

Third and final lane of the stacked-release fix train: the release
builder now populates the six archived donor models' CPS-named
predictors on every physical ACS support row through an exact
release-time join to the SHA-pinned canonical 2024 one-year ACS PUMS
archives (--acs-person-zip/--acs-person-sha256/--acs-household-zip/
--acs-household-sha256, required together for any ACS-bearing pool),
under strict hash, lineage, collision, totality, universe, and
clone-fan-out contracts. No model retraining, selection change, or
gate threshold change.

Integration re-pins, regenerated from the merged tree (not adopted
from either side):
- envelope spec_sha256: uk 2a761aea, be 7062e38f, us 835b4d61
  (verified against the live loader)
- seed_map 271c23ec, seed_protocol 870f9b43
- F0 coverage evidence: 42154/42154 fields, 41/41 inventory checks
- loader minimal golden vector re-pinned
- imputation.yaml pregnancy structural pin stays 3290b2dd
  (enabled=False authored identity, verified by direct computation)

Lane journals historicized with dated notes per the repo journal rule.

Verified locally: oracle spec/pool-tool suites, acspred-touched files,
transfer/pregnancy/prior-year/release-gate files (693 tests), ruff,
ci_test_groups --verify.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits August 28, 2026 08:41
The WAS pension-wealth split (#755) re-cut the UK spec digest on main
while this train had re-cut it over its own base; the union computes a
fresh value for UK (0db73b1c) and keeps the train's BE (7062e38f) and
US (835b4d61), all verified against the live loader on the merged
tree. Gate-battery pins from #755 hold unchanged on the union
(test_gate_battery_contract_pins green).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nion (second application)

Both merged UK lanes re-pinned the UK spec digest on main; the union
with this train computes a fresh UK value (71054f53), keeps BE at the
train's 7062e38f, and leaves US unchanged (835b4d61) — all verified
against the live loader on the merged tree. Loader, gate-battery-pin,
UK content-identity, and country-bundle suites green on the union.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit 4b133a8 into main Aug 28, 2026
23 checks passed
juaristi22 added a commit that referenced this pull request Aug 28, 2026
…join directions

Vahid's re-review endorsed the corrective posture and found four gaps of the
same shape one layer in - guards that silently skip. All four close:

1. The corrected child splits now allocate by largest remainder and assert
   closure per area: the four buckets sum exactly to the corrected total (the
   independent rounding drifted up to +/-2 households). Re-extraction moved
   exactly 225 split rows by at most 1 household; nothing else changed, and
   the fixture now proves the parts-sum-to-whole property about itself.
2. A positionally-consumed source without a 'code' column refuses instead of
   degrading to a length-only check that any right-sized permutation passes.
3. The vintage gate's three silent escapes are refusals: an unstamped fact,
   an unknown code prefix, and a level with no declared vintage all fail by
   name - the gate exists to prove the frame, and a fact that declines to say
   which frame it is on is the case it most needs to catch.
4. The name join asserts totality in both directions (unmatched publisher
   rows fail with their names listed), and a normalization collision is
   distinguished from a true duplicate in the error text.

Also rebases onto main 4b133a8 (#805 and the envelope-pin re-cut train) with
the UK spec pin re-derived, so the fixture regeneration ran once on the final
base.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juaristi22 added a commit that referenced this pull request Aug 28, 2026
…join directions

Vahid's re-review endorsed the corrective posture and found four gaps of the
same shape one layer in - guards that silently skip. All four close:

1. The corrected child splits now allocate by largest remainder and assert
   closure per area: the four buckets sum exactly to the corrected total (the
   independent rounding drifted up to +/-2 households). Re-extraction moved
   exactly 225 split rows by at most 1 household; nothing else changed, and
   the fixture now proves the parts-sum-to-whole property about itself.
2. A positionally-consumed source without a 'code' column refuses instead of
   degrading to a length-only check that any right-sized permutation passes.
3. The vintage gate's three silent escapes are refusals: an unstamped fact,
   an unknown code prefix, and a level with no declared vintage all fail by
   name - the gate exists to prove the frame, and a fact that declines to say
   which frame it is on is the case it most needs to catch.
4. The name join asserts totality in both directions (unmatched publisher
   rows fail with their names listed), and a normalization collision is
   distinguished from a true duplicate in the error text.

Also rebases onto main 4b133a8 (#805 and the envelope-pin re-cut train) with
the UK spec pin re-derived, so the fixture regeneration ran once on the final
base.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juaristi22 added a commit that referenced this pull request Aug 28, 2026
…join directions

Vahid's re-review endorsed the corrective posture and found four gaps of the
same shape one layer in - guards that silently skip. All four close:

1. The corrected child splits now allocate by largest remainder and assert
   closure per area: the four buckets sum exactly to the corrected total (the
   independent rounding drifted up to +/-2 households). Re-extraction moved
   exactly 225 split rows by at most 1 household; nothing else changed, and
   the fixture now proves the parts-sum-to-whole property about itself.
2. A positionally-consumed source without a 'code' column refuses instead of
   degrading to a length-only check that any right-sized permutation passes.
3. The vintage gate's three silent escapes are refusals: an unstamped fact,
   an unknown code prefix, and a level with no declared vintage all fail by
   name - the gate exists to prove the frame, and a fact that declines to say
   which frame it is on is the case it most needs to catch.
4. The name join asserts totality in both directions (unmatched publisher
   rows fail with their names listed), and a normalization collision is
   distinguished from a true duplicate in the error text.

Also rebases onto main 4b133a8 (#805 and the envelope-pin re-cut train) with
the UK spec pin re-derived, so the fixture regeneration ran once on the final
base.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant