From 0d8d0a56ab79218b8ab05fe25e680f5f7095411d Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Thu, 8 Oct 2026 10:53:30 -0400 Subject: [PATCH 1/2] Say what #720 changed in the unmarried-partner gap's reason The reviewed is_unmarried_partner_of_household_head exclusion said only the 2024 input carries A_EXPRRP and that older vintages take the line, spouse, sex and parent relationship fallback. That described Build J, which predates #720. Since #720 the two pooling tools bind each year to its pinned Census person file and _prepare_year_input restores Census A_EXPRRP before the recode, so no pooled vintage reaches the fallback. The reason (and the release manifest entry regenerated from it) and the A_EXPRRP note now say so, scope the Build J facts to that build, and state that the restore leaves out PERRP, PECOHAB and A_FAMREL although the pinned 2022-2024 Census person files carry them. The A_EXPRRP note gives code 13's make-up there: PERRP 44, 47 and 55. PERRP 43 and 46 partners fall in code 12. Wording only: classification, issue and gating are unchanged. Co-Authored-By: Claude Opus 5.5 --- changelog.d/us-unmarried-partner-gap-720-wording.fixed.md | 1 + .../src/microcosm/build/us/ecps_parity_known_gaps.json | 4 ++-- .../microcosm/build/us/release_input_coverage_manifest.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 changelog.d/us-unmarried-partner-gap-720-wording.fixed.md diff --git a/changelog.d/us-unmarried-partner-gap-720-wording.fixed.md b/changelog.d/us-unmarried-partner-gap-720-wording.fixed.md new file mode 100644 index 000000000..d9da871df --- /dev/null +++ b/changelog.d/us-unmarried-partner-gap-720-wording.fixed.md @@ -0,0 +1 @@ +Correct the wording of the reviewed `is_unmarried_partner_of_household_head` US parity gap, and of the release manifest reason generated from it, to match the code after microcosm #720. The old text said only the 2024 input carries `A_EXPRRP` and that the 2022 and 2023 vintages take the line, spouse, sex and parent relationship fallback. That was true of Build J, which predates #720. Since #720, `tools/build_us_puf_support_base.py` and `tools/build_us_asec_pooled_source_base.py` restore Census `A_EXPRRP` for those years from their pinned Census person files, so no vintage they pool reaches the fallback. The reason now says that the restore excludes `PERRP`, `PECOHAB` and `A_FAMREL`, which the pinned 2022-2024 Census person files carry. The `A_EXPRRP` note now gives code 13's make-up in those files: unmarried partners and housemates without relatives (PERRP 44, 47 and 55). Partners who have their own relatives in the household (PERRP 43 and 46) fall in code 12. Only the wording changes. The exclusion's classification, issue and gating are unchanged. diff --git a/packages/microcosm-build/src/microcosm/build/us/ecps_parity_known_gaps.json b/packages/microcosm-build/src/microcosm/build/us/ecps_parity_known_gaps.json index 81b23b3d4..b42ae28b8 100644 --- a/packages/microcosm-build/src/microcosm/build/us/ecps_parity_known_gaps.json +++ b/packages/microcosm-build/src/microcosm/build/us/ecps_parity_known_gaps.json @@ -122,7 +122,7 @@ } }, "is_unmarried_partner_of_household_head": { - "reason": "SOURCE UNAVAILABILITY WITH EVIDENCE: archived commit 42ed5d45c56df80d754fbe24cce21cfeb8d05cbe datasets/cps/cps.py lines 1214-1221 derives is_unmarried_partner_of_household_head exclusively from person PERRP; datasets/cps/census_cps.py lines 306-318 declares that person source. All three SHA-recorded 2022-2024 ASEC HDF inputs consumed by the hermetic build omit PERRP. The 2022 and 2023 inputs also omit PECOHAB, A_EXPRRP, and A_FAMREL; only 2024 carries those alternatives, and its A_EXPRRP code 13 conflates partner with roommate. Microcosm's older-year relationship fallback uses only line, spouse, sex, and parent pointers and never identifies a partner. Using the 2024 pointer for one-third of the pool while treating the other two-thirds as false, or assigning partner status from the combined partner/roommate code, would synthesize statuses the locked sources do not report.", + "reason": "SOURCE UNAVAILABILITY WITH EVIDENCE: archived commit 42ed5d45c56df80d754fbe24cce21cfeb8d05cbe datasets/cps/cps.py lines 1214-1221 derives is_unmarried_partner_of_household_head exclusively from person PERRP; datasets/cps/census_cps.py lines 306-318 declares that person source. All three SHA-recorded 2022-2024 ASEC HDF inputs consumed by the hermetic build omit PERRP, and the 2022 and 2023 inputs also omit PECOHAB, A_EXPRRP, and A_FAMREL. That build predates microcosm #720 and derived its 2022 and 2023 relationship codes from line, spouse, sex, and parent pointers, a fallback that never emits code 13. Since #720, tools/build_us_puf_support_base.py and tools/build_us_asec_pooled_source_base.py bind each pooled year to its pinned Census person file, and microcosm.build.us_runtime.asec_pool._prepare_year_input restores the microcosm.build.us_runtime.asec_census_person_columns.ASEC_CENSUS_PERSON_COLUMNS an input lacks before the relationship recode, so every vintage those tools pool carries Census A_EXPRRP and none reaches the fallback. Those reviewed columns exclude PERRP, PECOHAB, and A_FAMREL, although the pinned 2022-2024 Census person files carry all three. A_EXPRRP code 13 conflates partner with roommate, and partners who have their own relatives in the household fall in code 12 with other such nonrelatives. Using the 2024 pointer for one-third of the hermetic build's pool while treating the other two-thirds as false, or assigning partner status from the combined partner/roommate code, would synthesize statuses neither of those codes reports.", "issue": "PolicyEngine/microcosm#38", "evidence": { "classification": "source_unavailability", @@ -171,7 +171,7 @@ "2024": 0.3333333333333333 }, "semantic_non_substitutes": { - "A_EXPRRP": "Only the 2024 locked input carries it, and code 13 is the combined CPSRelationshipCode.PARTNER_OR_ROOMMATE category rather than the retired PERRP unmarried-partner category.", + "A_EXPRRP": "Of the hermetic build's three HDF inputs only 2024 carries it (the pinned income-year 2025 input does too), but since microcosm #720 microcosm.build.us_runtime.asec_pool._prepare_year_input restores it for 2022 and 2023 from their pinned Census person files, so every vintage the two pooling tools pool carries the Census recode: code 13 on 4,312, 4,387, 4,257, and 3,816 unweighted person records in 2022, 2023, 2024, and 2025. Code 13 is the combined CPSRelationshipCode.PARTNER_OR_ROOMMATE category, not the PERRP unmarried-partner codes the retired derivation reads: in the pinned 2022-2024 Census person files it holds PERRP 44 and 47 (unmarried partners without relatives) and 55 (housemates or roommates without relatives; 1,500, 1,601, and 1,614 records), while PERRP 43 and 46 (unmarried partners with relatives) fall in code 12 (nonrelatives with their own relatives in the household).", "PECOHAB": "Only the 2024 locked input carries the cohabiting-partner line pointer; it cannot recover partner status for the equally weighted 2022 and 2023 source years.", "derived_A_EXPRRP": "packages/microcosm-build/src/microcosm/build/us_runtime/asec_pool.py lines 397-422 derives older-year relationship codes from line, spouse, sex, and parent pointers and never emits code 13.", "rejection": "Using only the 2024 alternatives and filling the equally weighted 2022-2023 source years as false, or splitting the combined partner/roommate category, would synthesize person statuses absent from the locked inputs." diff --git a/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json b/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json index 57ecbcab6..ffa830ea0 100644 --- a/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json +++ b/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json @@ -255,7 +255,7 @@ }, "is_unmarried_partner_of_household_head": { "issue": "PolicyEngine/microcosm#38", - "reason": "SOURCE UNAVAILABILITY WITH EVIDENCE: archived commit 42ed5d45c56df80d754fbe24cce21cfeb8d05cbe datasets/cps/cps.py lines 1214-1221 derives is_unmarried_partner_of_household_head exclusively from person PERRP; datasets/cps/census_cps.py lines 306-318 declares that person source. All three SHA-recorded 2022-2024 ASEC HDF inputs consumed by the hermetic build omit PERRP. The 2022 and 2023 inputs also omit PECOHAB, A_EXPRRP, and A_FAMREL; only 2024 carries those alternatives, and its A_EXPRRP code 13 conflates partner with roommate. Microcosm's older-year relationship fallback uses only line, spouse, sex, and parent pointers and never identifies a partner. Using the 2024 pointer for one-third of the pool while treating the other two-thirds as false, or assigning partner status from the combined partner/roommate code, would synthesize statuses the locked sources do not report.", + "reason": "SOURCE UNAVAILABILITY WITH EVIDENCE: archived commit 42ed5d45c56df80d754fbe24cce21cfeb8d05cbe datasets/cps/cps.py lines 1214-1221 derives is_unmarried_partner_of_household_head exclusively from person PERRP; datasets/cps/census_cps.py lines 306-318 declares that person source. All three SHA-recorded 2022-2024 ASEC HDF inputs consumed by the hermetic build omit PERRP, and the 2022 and 2023 inputs also omit PECOHAB, A_EXPRRP, and A_FAMREL. That build predates microcosm #720 and derived its 2022 and 2023 relationship codes from line, spouse, sex, and parent pointers, a fallback that never emits code 13. Since #720, tools/build_us_puf_support_base.py and tools/build_us_asec_pooled_source_base.py bind each pooled year to its pinned Census person file, and microcosm.build.us_runtime.asec_pool._prepare_year_input restores the microcosm.build.us_runtime.asec_census_person_columns.ASEC_CENSUS_PERSON_COLUMNS an input lacks before the relationship recode, so every vintage those tools pool carries Census A_EXPRRP and none reaches the fallback. Those reviewed columns exclude PERRP, PECOHAB, and A_FAMREL, although the pinned 2022-2024 Census person files carry all three. A_EXPRRP code 13 conflates partner with roommate, and partners who have their own relatives in the household fall in code 12 with other such nonrelatives. Using the 2024 pointer for one-third of the hermetic build's pool while treating the other two-thirds as false, or assigning partner status from the combined partner/roommate code, would synthesize statuses neither of those codes reports.", "status": "reviewed_exclusion" }, "is_wic_at_nutritional_risk": { From 7f50ba142310d587fdfe2b5ce9a7402e90b215c7 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Thu, 8 Oct 2026 22:53:52 -0400 Subject: [PATCH 2/2] Name Build J and the pre-#720 checkpoint in the partner gap's reason Review nits on #1157: say "Build J" rather than "the hermetic build" (which the repo also uses for the current build), note that a raw-stage checkpoint built before #720 (the US spec's asec_raw_stage pin, set 2026-08-17) keeps the fallback codes, give the closing sentence a clear referent, and attach years to the PERRP 55 counts. Co-Authored-By: Claude Opus 5.5 --- changelog.d/us-unmarried-partner-gap-720-wording.fixed.md | 8 +++++++- .../src/microcosm/build/us/ecps_parity_known_gaps.json | 4 ++-- .../build/us/release_input_coverage_manifest.json | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/changelog.d/us-unmarried-partner-gap-720-wording.fixed.md b/changelog.d/us-unmarried-partner-gap-720-wording.fixed.md index d9da871df..cb2ab5521 100644 --- a/changelog.d/us-unmarried-partner-gap-720-wording.fixed.md +++ b/changelog.d/us-unmarried-partner-gap-720-wording.fixed.md @@ -1 +1,7 @@ -Correct the wording of the reviewed `is_unmarried_partner_of_household_head` US parity gap, and of the release manifest reason generated from it, to match the code after microcosm #720. The old text said only the 2024 input carries `A_EXPRRP` and that the 2022 and 2023 vintages take the line, spouse, sex and parent relationship fallback. That was true of Build J, which predates #720. Since #720, `tools/build_us_puf_support_base.py` and `tools/build_us_asec_pooled_source_base.py` restore Census `A_EXPRRP` for those years from their pinned Census person files, so no vintage they pool reaches the fallback. The reason now says that the restore excludes `PERRP`, `PECOHAB` and `A_FAMREL`, which the pinned 2022-2024 Census person files carry. The `A_EXPRRP` note now gives code 13's make-up in those files: unmarried partners and housemates without relatives (PERRP 44, 47 and 55). Partners who have their own relatives in the household (PERRP 43 and 46) fall in code 12. Only the wording changes. The exclusion's classification, issue and gating are unchanged. +Correct the wording of the reviewed `is_unmarried_partner_of_household_head` US parity gap, and of the release manifest reason generated from it, to match the code after microcosm #720. + +The old text said only the 2024 input carries `A_EXPRRP` and that the 2022 and 2023 vintages take the line, spouse, sex and parent relationship fallback. That was true of the hermetic Build J base, which predates #720, and the reason now names Build J. Since #720, `tools/build_us_puf_support_base.py` and `tools/build_us_asec_pooled_source_base.py` restore Census `A_EXPRRP` for those years from their pinned Census person files, so no vintage they pool reaches the fallback. A raw-stage checkpoint built before #720 keeps the fallback codes. One example is the `asec_raw_stage` that the US spec has pinned since 2026-08-17. + +The reason now says that the restore excludes `PERRP`, `PECOHAB` and `A_FAMREL`, which the pinned 2022-2024 Census person files carry. The `A_EXPRRP` note now gives code 13's make-up in those files: unmarried partners and housemates without relatives (PERRP 44, 47 and 55). Partners who have their own relatives in the household (PERRP 43 and 46) fall in code 12. + +Only the wording changes. The exclusion's classification, issue and gating are unchanged. diff --git a/packages/microcosm-build/src/microcosm/build/us/ecps_parity_known_gaps.json b/packages/microcosm-build/src/microcosm/build/us/ecps_parity_known_gaps.json index b42ae28b8..97c3bda95 100644 --- a/packages/microcosm-build/src/microcosm/build/us/ecps_parity_known_gaps.json +++ b/packages/microcosm-build/src/microcosm/build/us/ecps_parity_known_gaps.json @@ -122,7 +122,7 @@ } }, "is_unmarried_partner_of_household_head": { - "reason": "SOURCE UNAVAILABILITY WITH EVIDENCE: archived commit 42ed5d45c56df80d754fbe24cce21cfeb8d05cbe datasets/cps/cps.py lines 1214-1221 derives is_unmarried_partner_of_household_head exclusively from person PERRP; datasets/cps/census_cps.py lines 306-318 declares that person source. All three SHA-recorded 2022-2024 ASEC HDF inputs consumed by the hermetic build omit PERRP, and the 2022 and 2023 inputs also omit PECOHAB, A_EXPRRP, and A_FAMREL. That build predates microcosm #720 and derived its 2022 and 2023 relationship codes from line, spouse, sex, and parent pointers, a fallback that never emits code 13. Since #720, tools/build_us_puf_support_base.py and tools/build_us_asec_pooled_source_base.py bind each pooled year to its pinned Census person file, and microcosm.build.us_runtime.asec_pool._prepare_year_input restores the microcosm.build.us_runtime.asec_census_person_columns.ASEC_CENSUS_PERSON_COLUMNS an input lacks before the relationship recode, so every vintage those tools pool carries Census A_EXPRRP and none reaches the fallback. Those reviewed columns exclude PERRP, PECOHAB, and A_FAMREL, although the pinned 2022-2024 Census person files carry all three. A_EXPRRP code 13 conflates partner with roommate, and partners who have their own relatives in the household fall in code 12 with other such nonrelatives. Using the 2024 pointer for one-third of the hermetic build's pool while treating the other two-thirds as false, or assigning partner status from the combined partner/roommate code, would synthesize statuses neither of those codes reports.", + "reason": "SOURCE UNAVAILABILITY WITH EVIDENCE: archived commit 42ed5d45c56df80d754fbe24cce21cfeb8d05cbe datasets/cps/cps.py lines 1214-1221 derives is_unmarried_partner_of_household_head exclusively from person PERRP; datasets/cps/census_cps.py lines 306-318 declares that person source. All three SHA-recorded 2022-2024 ASEC HDF inputs consumed by the hermetic Build J base (experiments/build_j_recert) omit PERRP, and the 2022 and 2023 inputs also omit PECOHAB, A_EXPRRP, and A_FAMREL. Build J predates microcosm #720 and derived its 2022 and 2023 relationship codes from line, spouse, sex, parent, and household-size inputs, a fallback that never emits code 13. Since #720 (PR #991), tools/build_us_puf_support_base.py and tools/build_us_asec_pooled_source_base.py bind each pooled year to its pinned Census person file, and microcosm.build.us_runtime.asec_pool._prepare_year_input restores the microcosm.build.us_runtime.asec_census_person_columns.ASEC_CENSUS_PERSON_COLUMNS an input lacks before the relationship recode, so every vintage those tools pool carries Census A_EXPRRP and none reaches the fallback; a raw-stage checkpoint built before #720, such as the asec_raw_stage the US spec sources.yaml has pinned since 2026-08-17, keeps the fallback codes. Those reviewed columns exclude PERRP, PECOHAB, and A_FAMREL, although the pinned 2022-2024 Census person files carry all three. A_EXPRRP code 13 conflates partner with roommate, and partners who have their own relatives in the household fall in code 12 with other such nonrelatives. Using the 2024 pointer for one-third of Build J's pool while treating the other two-thirds as false, or assigning partner status from the combined partner/roommate code, would synthesize statuses that neither Build J's HDF inputs nor A_EXPRRP codes 12 and 13 report.", "issue": "PolicyEngine/microcosm#38", "evidence": { "classification": "source_unavailability", @@ -171,7 +171,7 @@ "2024": 0.3333333333333333 }, "semantic_non_substitutes": { - "A_EXPRRP": "Of the hermetic build's three HDF inputs only 2024 carries it (the pinned income-year 2025 input does too), but since microcosm #720 microcosm.build.us_runtime.asec_pool._prepare_year_input restores it for 2022 and 2023 from their pinned Census person files, so every vintage the two pooling tools pool carries the Census recode: code 13 on 4,312, 4,387, 4,257, and 3,816 unweighted person records in 2022, 2023, 2024, and 2025. Code 13 is the combined CPSRelationshipCode.PARTNER_OR_ROOMMATE category, not the PERRP unmarried-partner codes the retired derivation reads: in the pinned 2022-2024 Census person files it holds PERRP 44 and 47 (unmarried partners without relatives) and 55 (housemates or roommates without relatives; 1,500, 1,601, and 1,614 records), while PERRP 43 and 46 (unmarried partners with relatives) fall in code 12 (nonrelatives with their own relatives in the household).", + "A_EXPRRP": "Of Build J's three HDF inputs only 2024 carries it (the pinned income-year 2025 input does too), but since microcosm #720 microcosm.build.us_runtime.asec_pool._prepare_year_input restores it for 2022 and 2023 from their pinned Census person files, so every vintage the two pooling tools pool carries the Census recode: code 13 on 4,312, 4,387, 4,257, and 3,816 unweighted person records in 2022, 2023, 2024, and 2025. Code 13 is the combined CPSRelationshipCode.PARTNER_OR_ROOMMATE category, not the PERRP unmarried-partner codes the retired derivation reads: in the pinned 2022-2024 Census person files it holds PERRP 44 and 47 (unmarried partners without relatives) and 55 (housemates or roommates without relatives: 1,500, 1,601, and 1,614 records in 2022, 2023, and 2024), while PERRP 43 and 46 (unmarried partners with relatives) fall in code 12 (nonrelatives with their own relatives in the household).", "PECOHAB": "Only the 2024 locked input carries the cohabiting-partner line pointer; it cannot recover partner status for the equally weighted 2022 and 2023 source years.", "derived_A_EXPRRP": "packages/microcosm-build/src/microcosm/build/us_runtime/asec_pool.py lines 397-422 derives older-year relationship codes from line, spouse, sex, and parent pointers and never emits code 13.", "rejection": "Using only the 2024 alternatives and filling the equally weighted 2022-2023 source years as false, or splitting the combined partner/roommate category, would synthesize person statuses absent from the locked inputs." diff --git a/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json b/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json index ffa830ea0..0e8c17162 100644 --- a/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json +++ b/packages/microcosm-build/src/microcosm/build/us/release_input_coverage_manifest.json @@ -255,7 +255,7 @@ }, "is_unmarried_partner_of_household_head": { "issue": "PolicyEngine/microcosm#38", - "reason": "SOURCE UNAVAILABILITY WITH EVIDENCE: archived commit 42ed5d45c56df80d754fbe24cce21cfeb8d05cbe datasets/cps/cps.py lines 1214-1221 derives is_unmarried_partner_of_household_head exclusively from person PERRP; datasets/cps/census_cps.py lines 306-318 declares that person source. All three SHA-recorded 2022-2024 ASEC HDF inputs consumed by the hermetic build omit PERRP, and the 2022 and 2023 inputs also omit PECOHAB, A_EXPRRP, and A_FAMREL. That build predates microcosm #720 and derived its 2022 and 2023 relationship codes from line, spouse, sex, and parent pointers, a fallback that never emits code 13. Since #720, tools/build_us_puf_support_base.py and tools/build_us_asec_pooled_source_base.py bind each pooled year to its pinned Census person file, and microcosm.build.us_runtime.asec_pool._prepare_year_input restores the microcosm.build.us_runtime.asec_census_person_columns.ASEC_CENSUS_PERSON_COLUMNS an input lacks before the relationship recode, so every vintage those tools pool carries Census A_EXPRRP and none reaches the fallback. Those reviewed columns exclude PERRP, PECOHAB, and A_FAMREL, although the pinned 2022-2024 Census person files carry all three. A_EXPRRP code 13 conflates partner with roommate, and partners who have their own relatives in the household fall in code 12 with other such nonrelatives. Using the 2024 pointer for one-third of the hermetic build's pool while treating the other two-thirds as false, or assigning partner status from the combined partner/roommate code, would synthesize statuses neither of those codes reports.", + "reason": "SOURCE UNAVAILABILITY WITH EVIDENCE: archived commit 42ed5d45c56df80d754fbe24cce21cfeb8d05cbe datasets/cps/cps.py lines 1214-1221 derives is_unmarried_partner_of_household_head exclusively from person PERRP; datasets/cps/census_cps.py lines 306-318 declares that person source. All three SHA-recorded 2022-2024 ASEC HDF inputs consumed by the hermetic Build J base (experiments/build_j_recert) omit PERRP, and the 2022 and 2023 inputs also omit PECOHAB, A_EXPRRP, and A_FAMREL. Build J predates microcosm #720 and derived its 2022 and 2023 relationship codes from line, spouse, sex, parent, and household-size inputs, a fallback that never emits code 13. Since #720 (PR #991), tools/build_us_puf_support_base.py and tools/build_us_asec_pooled_source_base.py bind each pooled year to its pinned Census person file, and microcosm.build.us_runtime.asec_pool._prepare_year_input restores the microcosm.build.us_runtime.asec_census_person_columns.ASEC_CENSUS_PERSON_COLUMNS an input lacks before the relationship recode, so every vintage those tools pool carries Census A_EXPRRP and none reaches the fallback; a raw-stage checkpoint built before #720, such as the asec_raw_stage the US spec sources.yaml has pinned since 2026-08-17, keeps the fallback codes. Those reviewed columns exclude PERRP, PECOHAB, and A_FAMREL, although the pinned 2022-2024 Census person files carry all three. A_EXPRRP code 13 conflates partner with roommate, and partners who have their own relatives in the household fall in code 12 with other such nonrelatives. Using the 2024 pointer for one-third of Build J's pool while treating the other two-thirds as false, or assigning partner status from the combined partner/roommate code, would synthesize statuses that neither Build J's HDF inputs nor A_EXPRRP codes 12 and 13 report.", "status": "reviewed_exclusion" }, "is_wic_at_nutritional_risk": {