PR #561 merged (2ae4339) with the E19200 AGI-band decomposition after a four-round review. The final verdict carried two non-blocking advisories worth closing:
-
The low-level splitter is exported and permissive. split_us_puf_e19200_by_agi_band casts AGI directly to float64, so booleans/datetime/timedelta become finite band values if a caller reaches it directly. Not a production defect — the donor API (puf_tax_unit_donor_from_arrays) validates first (dtype-kind gate + infer_dtype element screen + finiteness) and passes validated float64 down — but the splitter is separately exported from populace.build.us_runtime. Either share the validation (move/reuse the screen inside the splitter) or remove the low-level export.
-
Decimal/numeric-string positive controls prove acceptance, not correct banding. The round-4 controls use a fixture without E19200, so the split short-circuits before band selection. Add a nonzero-E19200 boundary comparison: identical records with AGI supplied as Decimal/string vs float64 must produce identical mortgage/non-mortgage splits at a band boundary.
Both from the round-4 review verdict on PR #561.
PR #561 merged (2ae4339) with the E19200 AGI-band decomposition after a four-round review. The final verdict carried two non-blocking advisories worth closing:
The low-level splitter is exported and permissive.
split_us_puf_e19200_by_agi_bandcasts AGI directly to float64, so booleans/datetime/timedelta become finite band values if a caller reaches it directly. Not a production defect — the donor API (puf_tax_unit_donor_from_arrays) validates first (dtype-kind gate +infer_dtypeelement screen + finiteness) and passes validated float64 down — but the splitter is separately exported frompopulace.build.us_runtime. Either share the validation (move/reuse the screen inside the splitter) or remove the low-level export.Decimal/numeric-string positive controls prove acceptance, not correct banding. The round-4 controls use a fixture without E19200, so the split short-circuits before band selection. Add a nonzero-E19200 boundary comparison: identical records with AGI supplied as
Decimal/string vs float64 must produce identical mortgage/non-mortgage splits at a band boundary.Both from the round-4 review verdict on PR #561.