Repository navigation
Conversation
Gov. Code 100800(c) delegates the state premium subsidy design to the Covered California Board. The adopted 2026 Program Design runs its bands "100% up to 150%" (0%) and "Above 150% up to 165%"; the 2026 Policy Explainer labels the upper band "150% - At or Below 165%". The model now puts a fraction equal to a threshold in the lower band (searchsorted side="left"), keeping the existing whole-percentage FPL truncation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r1 P3s: searchsorted comments now say side="left"; Case 13 explains the continuous rate at 165% in 2027; Case 2b tests 1.505 instead of duplicating Case 7; a new case derives 150.49% from wages and shows the truncated fraction pays 0%; the threshold comment notes the truncation is the federal form's gap-fill; the eligibility test header matches the formula's FPL-band description. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ca_premium_subsidy_eligible compared the truncated aca_magi_fraction with <= 1.65, so every PY2026 income from 165.003% to 165.994% of FPL passed an "at or below 165 percent" test (Program Design (d)(7)). Compare the exact ratio of nonnegative ACA MAGI to prior-year FPG instead, as FTB 3849 Table 1-2 does for the predecessor program's band edges. The PY2027 limit was 1.99 on the truncated fraction, which equals "under 200 percent" only under truncation. Express it as 2.0 with a new fpl_limit_inclusive parameter (true in PY2026, false in PY2027), the same pattern as NM's benchmark_gross_up.boundary_inclusive. Tests: boundary cases from derived income at $25,822.50 / $25,823 / $25,978 / $25,979 (PY2026) and $26,335 / $31,919 / $31,920 (PY2027); supplied cases now set aca_magi and prior-year FPG instead of the fraction; a Hypothesis differential test against an exact-rational reading of (d)(7). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cases 1b and 2b test the PY2026 floor at $15,649 (99.994%, ineligible) and $15,650 (exactly 100%, eligible) of the 2025 one-person FPG, so the PE tests mirror the companion cases added to rulespec-us#1832. The two 2026 Program Design references differed only by #page=, so they become one entry per the repo's reference rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 20, 2026
Open
The model stores MAGI and FPG as float32. A float32 quotient can round a ratio a fraction of a cent above 165% of a fractional guideline down to 1.65 (e.g. $18,711.599609375 over $11,340.36328125), so the gate now divides in float64. On float32 inputs that classifies every ratio exactly against 1.00, 1.65 and 2.00. The property test built one simulation per year and reused it, deleting only the output array, so derived intermediates could stay cached across Hypothesis examples. It now builds a fresh simulation per example. Its reference reads (d)(7) on the stored float32 values, the generator adds fractional guidelines and incomes a few float32 steps from each edge, and explicit examples cover the float32 counterexamples and a 72-person household at exactly 166% that main's float32 truncation misrounds to 165.99%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts in ca_premium_subsidy.yaml Cases 4 and 11: keep this branch's whole-dollar boundary incomes ($25,822.50 and $15,650) and pin the 2025 FPG at $15,650, following #10301's FPG pinning. Drop this branch's duplicate ca_premium_subsidy_eligible input in Case 6. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Final 2027 Program Design replaces the V4 schedule this model carried: (d)(4) has one paying band, "Above 150% up to 200%", from 2.8% to 5.28% (V4: 2.69%-3.41% to 165%, then 3.41%-5.1%), and (d)(7) makes household income "at or below 200 percent" eligible (V4: "under 200 percent"). - Thresholds [1, 1.5, 2.0], initial [0, 0.028], final [0, 0.0528]. - Both years' limits are inclusive, so drop fpl_limit_inclusive and test the exact ratio with <=. - The OE27 enroller deck's summary slide says "up to under 200% FPL" while its own 200% example applies 5.28%; follow (d)(7) and record candidate us-ca:premium-subsidy-200-fpl-limit. - Rate, amount and eligibility cases move to the Final Design, including the deck's $31,920 example (5.28%, $478.80 a year) and incomes that truncate to 2.00 but exceed 200%; the property tests read 2027 as inclusive and #10301's rate properties now cover 2027. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The model stores aca_magi and tax_unit_fpg as float32. Their float32 quotient can round an exact ratio just above 150% of a fractional FPG down onto 1.5, which side="left" then puts in the 0% band. Divide in float64, as the eligibility gate already does, and add a float32 regression test for both plan years. Whole-dollar FPGs pick the same band either way. Amount Case 19 supplies aca_ptc at the official Rev. Proc. 2026-26 credit. Say why in the case: the federal parameters still carry the 2026 applicable percentages into 2027, so a derived credit would use 6.60% instead of 6.78% at 200% FPL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
October 24, 2026 17:12
Contributor
Author
|
Hand-off to the US + core hub, at head 93371bc.
|
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ready for review. The exact-ratio eligibility fix and the move to the Final 2027 Program Design are done, with tests, Axiom parity and a full-file impact run (see Impact). A GPT-6.1 Sol shell-backed review approved
93371bc7e8. Merge order: #10301 first.Stacked on #10301. This branch merges #10301's head
cc1af12cd1, because both PRs edit the same premium-subsidy tests and parameters. Land #10301 first; this PR then mergesmain, and its diff shrinks to its own changes. Until then the diff also shows #10301's changes.This PR makes two changes, one for each plan year:
1. PY2026: exact-ratio eligibility
ca_premium_subsidy_eligiblecompared the truncatedaca_magi_fraction(np.floor(100 * magi / fpg) / 100) with<= 1.65. Truncation maps every income from 165.00% to 165.99% of FPL to 1.65, so all of them passed. The adopted 2026 Program Design, (d)(7) limits an applicable return filer to household income "at or above 100 percent and at or below 165 percent of the federal poverty level".Reproduced on
main(bda23eac4c) for a single filer in CA in 2026, with the 2025 one-person FPG of $15,650:aca_magi_fractionFix: eligibility is now decided on the exact ratio
max(aca_magi, 0) / tax_unit_fpg(period.last_year), divided in float64.2. PY2027: the Final 2027 Program Design
On
main, PY2027 follows Program Design V4: it has a knot at 165% and "under 200 percent" eligibility. The Final 2027 Program Design, PDF p.2, replaces it.The Final Design's (d)(4) table:
Its (d)(7) defines an applicable return filer by household income "at or above 100 percent and at or below 200 percent of the federal poverty level".
The 2027 Program Insight (published 9/2/2026, Table 1) agrees: "150% – At or Below 200%: 2.8% – 5.28%".
Changes:
[1, 1.5, 2.0], initial[0, 0.028], final[0, 0.0528], andfpl_limit2.0, all re-cited away from V4 and Board Resolution 2026-22.in_effect's comment now names the Final Design.fpl_limit_inclusiveparameter it had added for V4's strict limit. The gate testsfloor <= r <= limit.side="left") puts exactly 200% at the top of the paying band, at 5.28%. The only change toca_premium_subsidy_applicable_percentage.pyis that its band ratio is now divided in float64, like the eligibility gate. A float32 quotient can round a ratio just above 150% down onto 1.5, and the 0% band would then catch it. Example: $24,600.00390625 over a supplied FPG of $16,400.001953125 is 1.50000006. Before this change it got 0%; now it gets the paying band's starting rate. This only matters for fractional FPGs; see invariant 3.Applicable percentage at the lookup fraction, V4 (
main) against the Final Design (this PR):The Final paying-band rate is above V4's at every lookup fraction from 1.50 to 2.00, since both are linear between knots and the gap is positive at each knot.
Who gains and who loses in PY2027, against
main, with the published whole-dollar guidelines:side="right"put a truncated 1.50 in the paying band. For FPGs of $262,145 or more, main's float32 fraction also truncates some ratios up to 1.50 from as much as 1.4e-7 below 150%, and these move to 0% too. Under the 2026 contiguous guidelines, an FPG that large means 45 or more people. The smallest published guideline the search hit is an Alaska household of 73.How this was checked. I replicated main's and this head's formulas in numpy, on float32 inputs as the model stores them. The search covered every whole-dollar FPG from $15,000 to $1,000,000. For each FPG it took 530 incomes at 150% and at 200%: the 129 float32 values within ±64 ulps, plus the 401 whole-cent incomes within ±$2. That is 522 million points per edge. The independent review ran a superset: every float32 income within the larger of 64 ulps and $2 of 100%, 150%, 165% and 200%, 776 million points in all. It confirmed each statement below.
Fractional FPGs are not covered by these statements.
tax_unit_fpgisfirst_person + additional_person × (size − 1)from whole-dollar guidelines, so no PE household has one. They can still be supplied. Sol's review found MAGI $240,703.03125 over FPG $120,351.5234375, an exact ratio just below 200%. Main's float32aca_magi_fractionrounds it up to 2.00, so main rejects the household (limit 1.99). This head admits it, as (d)(7) requires, so its subsidy rises from $0. The matching case just above 150% is fixed by the float64 band ratio above.Source conflict at 200% (candidate
us-ca:premium-subsidy-200-fpl-limit). The OE27 enroller deck disagrees with itself. Its summary slide (PDF p.38) says the subsidy "applies only to enrollees up to under 200% FPL". Its worked example of $31,920 at exactly 200% FPL (PDF pp.37, 39–40) applies "5.28% (6.78% - 1.5%)". This PR follows the adopted Design's (d)(7), and the Insight agrees with it. The candidate is insource_conflicts/candidates.yaml(follows: statute). The deciding line infpl_limit.yamldocuments the conflict, and that file is inKNOWN_UNMARKEDuntil the entry is registered.Why an allowance instead of a marker. A marker must name an entry in the pinned register that lists its file (
test_every_marker_names_a_registered_entry_that_lists_its_file). Marking here would mean registering in rulespec-us, landing that PR and bumping the pin, all inside this PR. The register pins shipped code ("Pin only commits onmain", CONTRIBUTING.md#source-conflicts), so the US hub keeps register entries and markers out of the PR that makes the ruling. #10301's 150% candidate takes the same path, and so did #10315's guardian-fee candidate, which merged on 2026-10-24 (1dc89f047f) with its ownKNOWN_UNMARKEDline:KNOWN_UNMARKEDline and a candidate naming this PR and its files;# Source conflict us-ca:premium-subsidy-200-fpl-limitat the deciding line.The guard forces the cleanup. A file with a valid marker is skipped by the count. So once the marker lands,
test_conflict_sounding_comments_do_not_growfails (itsshrunkassertion) until theKNOWN_UNMARKEDline is deleted.test_candidates_are_not_yet_registeredlikewise fails until the candidate is deleted.Federal 2027 table: a dependency, not in this PR.
main's federal applicable percentages carry the 2026 table (Rev. Proc. 2025-25) into 2027. Rev. Proc. 2026-26 §3.01 sets the 2027 table:main)The state subsidy is
max(0, slcsp − aca_ptc − ca_pct × income). Wherever it is positive, each dollar of federal credit the stale table adds is a dollar less of state subsidy.aca_ptcis the same in the base and head runs, so the gap cancels out of the head-minus-base change wherever the subsidy is positive in both. It does change the levels. It also changes the amount for households that newly qualify at exactly 200%: 1.32% of income at the stale 6.60%, against 1.5% at 6.78%.Invariants
All of these are about this PR's head. They assume the non-income conditions hold (in effect, an APTC-eligible member, a filed return, residence in California).
rismax(MAGI, 0) / FPG(prior year), computed exactly on the stored float32 values.1 <= r <= L, where L is 1.65 in PY2026 and 2.0 in PY2027. Both bounds are inclusive.fractions.Fractionreading of the Designs (bounds transcribed from the PDFs, not read from the parameters).test_float32_ratio_just_above_150_uses_upper_band, which feeds the example above as float32 for both years. Restoring the float32 division fails it in both years.Differences from
main. These are descriptive, not invariants. With the published whole-dollar guidelines:main's float32 misrounding of exact multiples of 1%. Example: the 2025 FPG for 72 people is $406,150, and MAGI of $674,209 is exactly 166%. Main computes 165.99% and admits the household.main's float32 fraction can also round a ratio just below a 1% multiple up onto it.Tests
ca_premium_subsidy_eligible.yaml(34 cases). In the PY2026 boundary rows, the incomes are derived from wages, using the actual FPG.Supplied-ratio cases cover 199%, 199.5%, 200% (eligible) and 200.5% (ineligible) in PY2027. Supplied cases set
aca_magiand prior-yeartax_unit_fpginstead of the fraction, which the gate no longer reads.ca_premium_subsidy_applicable_percentage.yaml(25 cases). The PY2027 cases move to the Final Design: 1.575 → 3.172%, 1.65 → 3.544%, 1.825 → 4.412%, 1.99 → 5.2304% and 2.00 → 5.28%. New income-derived cases: $23,942 (150.0125%) → 2.8%, and $31,920 (exactly 200%) → 5.28%. #10301's $23,940 (exactly 150%) → 0% is kept.ca_premium_subsidy.yaml(19 cases).Property tests:
test_ca_premium_subsidy_eligible_properties.py(4 tests): the eligibility differential test above, with PY2027 read as inclusive. New explicit examples: $31,919, $31,920, $31,921 and $32,079 at $15,960, and $32,001 at $16,000. Each example builds a fresh simulation.test_ca_premium_subsidy_applicable_percentage.py: now parametrized over 2026 and 2027, plustest_float32_ratio_just_above_150_uses_upper_band(12 tests). It calls the formula directly, without building a simulation. Its_rateshelper now takes an FPG and a dtype, so the new test can feed float32 values.Mutation checks (local):
<)test_float32_ratio_just_above_150_uses_upper_bandfails, both yearsLocal runs at
93371bc7e8, one file per process (macOS):household_health_benefits.yaml.test_source_conflicts.py: 103 passed.test_programs_registry.py: 765 passed, 10 skipped.Impact
A real microsimulation on the default dataset:
mainat the merge base6a92d6a983against1238297ebf, for 2026 and 2027. The US hub ran it as jobimp-10305-final, one run at a time under its heavy-job lock. Sums are weighted. #10301's own run atcc1af12cd1changed nothing in either year, so this comparison measures this PR's changes.ca_premium_subsidyassigned_ca_premium_subsidyhealthcare_benefit_valuehousehold_net_income_including_health_benefitsca_premium_subsidy_eligiblestate_income_tax,income_tax,household_net_income,household_benefitsd9929e416a.main's stale federal percentages. As explained under "Federal 2027 table", the stale table cancels out of the change wherever the subsidy is positive in both runs.This run also covers
93371bc7e8. The delta from1238297ebfchanges the model in one place: the dtype of the band ratio inca_premium_subsidy_applicable_percentage. The rest of the delta is a test and a YAML comment.tax_unit_fpgisfirst_person + additional_person × (size − 1), with an integer size and the whole-dollar 2025 and 2026 CONTIGUOUS_US, AK and HI parameters.So every record's output at
93371bc7e8equals its output at1238297ebf.Comparison files are in
fixes/10305-impact/on the US hub host.Coordination
ca_premium_subsidy.yamlCases 4 and 11. They were resolved to this branch's whole-dollar boundary incomes, with Follow the adopted California Premium Subsidy design at the 150% FPL boundary #10301's FPG pinning. A duplicateca_premium_subsidy_eligibleinput in Case 6 was dropped.cc1af12cd1, merge its final head here first. Then mergemain. A simulated squash ofcc1af12cd1ontomain(c0b360ddbf), merged with this head, conflicts in five files:mainhasn't touched since the merge base: take this branch's side. They areca_premium_subsidy.yaml,ca_premium_subsidy_applicable_percentage.yaml,test_ca_premium_subsidy_applicable_percentage.pyandca_premium_subsidy_applicable_percentage.py.source_conflicts/candidates.yaml: take this branch's side and keep Exclude county agency staff from Minnesota MSA guardian fees #10315's Minnesota hunk frommain.aca_magi_fractionwith a limit, with a PR for each. Its table (row 9) lists this PR and Follow the adopted California Premium Subsidy design at the 150% FPL boundary #10301 as covering the California gate. Treat income exactly at 400% FPL as premium tax credit eligible #10312, for the federal 400% ceiling, is one of its PRs.axiom: TheAxiomFoundation/rulespec-us#1832 queued: the (d)(7) eligibility extension, now updated for the Final 2027 Design. It carries:
review_finding;The encoder path is blocked. The Covered California designs are not yet in the pinned corpus release, and signed generation needs Max's approval.
🤖 Generated with Claude Code