Skip to content

Capture Covered California sources for two premium subsidy register entries - #10672

Open
MaxGhenis wants to merge 3 commits into
mainfrom
ca-premium-subsidy-source-captures
Open

MaxGhenis wants to merge 3 commits into
mainfrom
ca-premium-subsidy-source-captures

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

This adds text captures of eleven Covered California documents and Title 25 of the California Government Code, for two source-conflict register entries. Both entries record choices PolicyEngine-US has made: #10301 moved a household at exactly 150% FPL into the California Premium Subsidy's 0% band, and #10305 made a household at exactly 200% FPL eligible for the 2027 subsidy. rulespec-us's verify step reads each text the Axiom corpus lacks from a capture in this repository, at a pinned commit and sha256. It refuses a commit outside main, so these files must merge before TheAxiomFoundation/rulespec-us#2053 can cite them.

Captures

All twelve sit in source_conflicts/sources/us-ca/. Each .txt file opens with its URL and extraction method, pdftotext (poppler) in reading order, and holds the pages the table lists.

Capture Document Pages Entries
gov-code-title-25-20260307.html Government Code Title 25, the Internet Archive's copy of March 7, 2026, with section 100800 whole page both
premium-subsidy-program-design-2026-p1-2.txt Final 2026 California Premium Subsidy Program Design, opening and (d)(4) 1-2 150%
premium-subsidy-program-design-2027-p1-2.txt Final 2027 California Premium Subsidy Program Design, opening, (d)(4) and (d)(7) 1-2 both
premium-subsidy-program-design-2027-board-version-p1-2.txt June version of the 2027 Design, dated May 21, 2026, as presented to the Board on June 18: opening, (d)(4) and (d)(7) 1-2 both
premium-subsidy-board-resolution-2026-22.txt Board Resolution 2026-22 1 both
premium-subsidy-board-deck-2026-06-18-p36-38.txt Board deck, June 18, 2026, contribution table and action requested 36-38 both
premium-subsidy-board-minutes-2026-06-18-p6-7.txt Board minutes, June 18, 2026, 2027 Design action item 6-7 200%
premium-subsidy-ed-report-2026-08-20-p12.txt Executive Director's report, August 20, 2026, state budget action 12 200%
premium-subsidy-ed-report-2026-09-17-p43.txt Executive Director's report, September 17, 2026, 2027 Design submission 43 200%
premium-subsidy-explainer-2026-p2.txt 2026 State Premium Subsidy Policy Explainer, Table 1 2 150%
premium-subsidy-insight-2027-p1-2.txt 2027 State Premium Subsidy Program Insight, Background and Table 1 1-2 both
oe27-enroller-kickoff-p37-40.txt OE 2027 Enroller Kick-off, worked examples and the note on page 38 37-40 both

leginfo.legislature.ca.gov answers automated requests with a bot check, so the Title 25 file holds the raw bytes of the Internet Archive's copy of the page the 2027 Insight's endnote 1 cites.

We capture the Board's papers because the Board adopted the June version on June 18, 2026, and that version's (d)(7) reads "under 200 percent", where the Final 2027 Design reads "at or below 200 percent". TheAxiomFoundation/rulespec-us#2053 sets out that record.

Verification

Next

  1. Register two California Premium Subsidy source conflicts TheAxiomFoundation/rulespec-us#2053 adds both entries. Their pending_texts pin these files at this PR's squash commit, and their implementations and tests pin Decide CA Premium Subsidy eligibility on the exact FPL ratio and adopt the Final 2027 design #10305's squash commit (4648a77), where all four deciding files match main.
  2. A PE-US PR then vendors the new register, marks the deciding line in all four files, and deletes both candidates and their KNOWN_UNMARKED lines.
  3. A later rulespec-us PR repins all four implementations to that PR's merge commit with cites_entry: true, and the next register refresh here makes the guard enforce the four markers.

impact: none; no variable or parameter changes (source captures and a changelog fragment only)

axiom: n/a: source captures for the source-conflict register; no model change

🤖 Generated with Claude Code

…ntries

The shared source-conflict register cites each text the Axiom corpus lacks
under pending_texts, pinned to a capture in this repository by commit and
sha256. These five captures back two entries PolicyEngine-US already ruled:
us-ca:premium-subsidy-150-fpl-boundary (#10301) and
us-ca:premium-subsidy-200-fpl-limit (#10305).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits November 6, 2026 09:02
The register entries turn on which text Covered California adopted. Page 1
of each Design holds its adoption sentence, so both Design captures now
cover pages 1-2. Board Resolution 2026-22 adopts the 2027 Design as presented
on June 18, 2026; that version's (d)(7) reads "under 200 percent", where the
Final 2027 Design reads "at or below 200 percent". The June 18 minutes record
staff asking for direction to finalize the document. These captures let the
200% entry cite each of those texts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… subsidy entries

Both register entries cite Gov. Code 100800(c). leginfo answers automated
requests with a bot check, so this adds the Internet Archive's copy of Title
25 from March 7, 2026, byte for byte. The June 18, 2026 Board deck records
what staff asked the Board to do, and the Executive Director's reports of
August 20 and September 17 record what Covered California did after the
budget passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@DTrim99

DTrim99 commented Nov 6, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Capture Covered California sources for two premium subsidy register entries

Summary

This PR changes no model code. It adds 12 source captures under source_conflicts/sources/us-ca/: 11 page-range text extracts of Covered California PDFs and the Internet Archive's raw copy of Government Code Title 25. It also adds a changelog fragment, for 13 files in total. The captures back two register entries in TheAxiomFoundation/rulespec-us#2053: us-ca:premium-subsidy-150-fpl-boundary, from #10301, and us-ca:premium-subsidy-200-fpl-limit, from #10305.

I checked every capture against its live source:

  • The 11 PDF extracts: each one, word for word, over its stated page range.
  • The Title 25 HTML: byte for byte against the Internet Archive's own content digest.
  • The register pins: every sha256 pin and all 30 excerpts in rulespec-us#2053 match the captures at this head.

I found no fidelity, page-range or hygiene problem. Two optional suggestions follow.

Critical

None.

Should address

None.

Suggestions

  1. Record where an archive-sourced .html capture came from.
    • source_conflicts/sources/README.md says ".html files are the official page as fetched".
    • gov-code-title-25-20260307.html is instead the Internet Archive's id_ copy of the leginfo page from March 7, 2026. It is byte-identical to what the archive fetched (see Verified).
    • Nothing in the repository says so: the file has no header, by convention, and the provenance appears only in the register entry's url.
    • A captured file can't be edited once pinned, so add one README sentence instead. For example: "An .html capture may be an Internet Archive raw (id_) copy of the official page when the official site blocks automated fetches; the register entry's url names the copy."
  2. The "as presented to the Board" link rests on an uncaptured page (optional).
    • Resolution 2026-22 adopts the 2027 Design "as presented to the Board on this day". The adoption record therefore depends on which file was presented on June 18.
    • The June 18 meeting page is the only record that names that file. It links CoveredCA_2027_Premium_Subsidy_Program_Design_V4_05-19-26.pdf as "Proposed 2027 California Premium Subsidy Program Design". I confirmed this; the May 21 page links the same file.
    • The captured deck, p. 36, corroborates the link: its rates (2.69%–3.41%, 3.41%–5.1%, "Above 165% – Under 200%") match V4's (d)(4) exactly. That is adequate, but a capture of the meeting page would pin the link directly if rulespec-us#2053's 200% basis is challenged.
    • Separately, the PR body calls V4 the "June version". It was first posted for the May 21 meeting and carries a "May 21, 2026" footer. "The May 21 V4 draft, linked again as the proposed design for June 18" would be clearer.

Verified correct

Fidelity of the 11 PDF captures. I downloaded each URL with a generic User-Agent; all returned HTTP 200 and a PDF. I then extracted the stated pages and compared word streams with each capture's body, below its two header lines.

  • Identical word lists in all 11 files. I compared word counts and sorted word lists.
  • The only differences are footnote superscripts. In the Explainer and the Insight, the capture splits superscript footnote digits from the preceding word ("percentages. 5" against "percentages.5"). That is a known difference between the capture's engine (poppler) and the one I used.
  • No missing, extra or wrong-page text. The word counts for the stated page ranges match exactly, which also confirms the page lists:
    • 2026 Design pp. 1-2: 763 words
    • Final 2027 Design pp. 1-2: 737
    • V4 pp. 1-2: 740
    • Resolution p. 1: 118, a one-page document
    • Deck pp. 36-38: 408
    • Minutes pp. 6-7: 872
    • ED report of Aug 20, p. 12: 217
    • ED report of Sep 17, p. 43: 78
    • Explainer p. 2: 292 (the capture's 293 is the split superscript)
    • Insight pp. 1-2: 638 (the capture's 643 is five split superscripts)
    • OE27 deck pp. 37-40: 882
  • Printed page numbers agree with the PDF pages. These include "37"/"38" in the deck, "6"/"7" in the minutes, "12", "43", "Page 2 of 3" and "37"–"40".
  • Headers match the PR table. Each .txt header gives the URL, with #page= at the first captured page, and "Pages a-b, text extracted with pdftotext (poppler), reading order". This matches the PR table and the existing captures, for example "Pages 19-19" in us-hi.

Fidelity of the Title 25 capture.

  • The Wayback replay endpoint returned HTTP 429 to automated requests, so I compared hashes instead.
  • The archive's CDX index lists the 20260307034932 capture of the cited URL with content digest LBQ22UPZNVAXCOBIXZE47J52JPXFUXJO. The capture file's SHA-1 in base32 is the same value, so the file holds the archive's exact raw bytes.
  • leginfo answered my direct request today with HTTP 200. Its tag-stripped text matches the capture token for token, except one facelets debug timestamp. Title 25 is therefore unamended since March 7, 2026.
  • Section 100800(c) and (c)(1) read as the entries quote: "shall adopt, and may amend, an annual program design for each coverage year to implement this section by resolution of the board of the Exchange" and "shall not take effect until 10 days after notification in writing to the Joint Legislative Budget Committee".
  • The Insight's endnote 1, on PDF p. 3, cites this exact codes_displayText ... title=25. URL.

Boundary wording the entries rely on, all present in the captures:

  • 150% boundary, the Designs' side. All three Designs give the (d)(4) bands as "100% up to 150%" at 0% and "Above 150% up to …":
    • 2026 Design: "up to 165%" at 3.19%–3.91%
    • Final 2027: "up to 200%" at 2.8%–5.28%
    • V4: "up to 165%" at 2.69%–3.41%
  • 150% boundary, the guidance side. These sources start the paying band at 150%:
    • Explainer Table 1: "150% – At or Below 165%" at 3.19%–3.91%*
    • Insight Table 1: "150% – At or Below 200%" at 2.8%–5.28%*
    • Deck p. 36: "150% – At or Below 165%" at 2.69%–3.41%
    • OE27 deck p. 39: "For individuals at 150% of the FPL, the required contribution percentage decreases from 4.30% to 2.80%"
  • 200% limit, the Final 2027 side. (d)(7) reads "at or above 100 percent and at or below 200 percent".
  • 200% limit, the V4 side. (d)(7) reads "at or above 100 percent and under 200 percent". diff shows the two 2027 texts differ on pp. 1-2 only in footers, the (d)(4) table and (d)(7).
  • The Board adoption record:
    • Resolution 2026-22 adopts the Design "as presented to the Board on this day, contingent upon the enactment of the Budget Act of 2026".
    • Deck p. 38 seeks "direction to finalize the program design document contingent upon passage of the State Budget …".
    • Minutes pp. 6-7 say staff would finalize the Design, submit it to the Joint Legislative Budget Committee and post it.
    • The ED report of Aug 20, p. 12, describes the expansion "to enrollees up to 200 percent of the Federal Poverty Level".
    • The ED report of Sep 17, p. 43, reports the submission to the Joint Legislative Budget Committee.
  • The OE27 deck on 200%. The note on p. 38 reads "applies only to enrollees up to under 200% FPL". Pages 37 and 39-40 apply 5.28% at exactly 200%.

Hand-checks of the captured worked examples. These confirm the captures support each entry's readings.

  1. 200% FPL: 2 × $15,960 = $31,920; 150% FPL: 1.5 × $15,960 = $23,940. Both match OE27 pp. 37 and 39.
  2. 31,920 × 6.78% ÷ 12 = 180.35, which matches "≈ $180".
  3. $688 − $180 = $508, the federal PTC.
  4. 6.78% − 1.5 = 5.28%, and 31,920 × 5.28% ÷ 12 = 140.45, which matches "≈ $140".
  5. $180 − $140 = $40, then $508 + $40 + $1 = $549, then $688 − $549 = $139, the net benchmark premium on p. 38.
  6. At 150%: 23,940 × 2.80% ÷ 12 = 55.86, so the net is $55 and help is $633 (688 − 55.86 + 1 = 633.14). The deck therefore charges 2.80% at exactly 150%, which is the 150% entry's alternative reading.
  7. Insight Table 1: 4.3% − 1.5 = 2.8% and 6.78% − 1.5 = 5.28%. Both equal the Final 2027 Design's (d)(4) band.
  8. Bronze at 200%: $559 − $549 = $10. Bronze at 150%: help of $633 exceeds the $559 premium, so the net is $0, matching the deck's capped-at-premium note.

Register linkage, against rulespec-us#2053: OPEN, draft, head 02b4de94, one file known-source-conflicts.yaml, +389 lines.

  • Pins. All 30 pending_texts snapshots pin repo: PolicyEngine/policyengine-us, commit c745d21f5b (this head) and paths under source_conflicts/sources/us-ca/. All 12 sha256 values equal the files at this head.
  • Excerpts. Each of the 30 excerpts appears verbatim in its capture after whitespace normalization.
  • Coverage. Every file in this PR is cited.
  • Entries column. The PR table's "Entries" column matches NY TANF flat income disregard #2053's use of each file:
    • Both entries: Title 25, the Final 2027 Design, V4, the resolution, the deck, the Insight and OE27.
    • 150% only: the 2026 Design and the Explainer.
    • 200% only: the minutes and both ED reports.
  • Squash merge. NY TANF flat income disregard #2053 says it will repin to this PR's squash commit. A squash merge keeps file bytes, so the sha256 pins stay valid.
  • Implementations. They pin 4648a778, the squash commit of Decide CA Premium Subsidy eligibility on the exact FPL ratio and adopt the Final 2027 design #10305. That commit is on main, and all four deciding files are identical there and on main. Those files are threshold.yaml, ca_premium_subsidy_applicable_percentage.py, fpl_limit.yaml and ca_premium_subsidy_eligible.py.
  • Candidates. The candidates on main (source_conflicts/candidates.yaml) cite the same documents and PDF pages, all of them inside the captured ranges:
    • Designs (d)(4)/(d)(7): p. 2
    • Explainer Table 1: p. 2
    • Insight: pp. 1-2
    • OE27 deck: pp. 37-40 / 39-40

Repository hygiene.

  • Location and format. These follow CONTRIBUTING.md#source-conflicts. Steps 1 and 2 put a capture the corpus lacks under source_conflicts/sources/ on main before the register pins it. Line 122 says "A PR here adds those first."
  • Layout. Files sit in a per-jurisdiction folder (us-ca/) as on main.
  • Packaging. The wheel ships only policyengine_us, through [tool.hatch.build.targets.wheel] packages = ["policyengine_us"], so none of these files ship in it.
  • Size.
    • The 146 KB Title 25 page is within precedent: us-ny/it201-instructions-2025.html is 289 KB, and the us-mn and us-oh HTML files are 84 KB and 91 KB.
    • Title 25 has only sections 100800–100825, and the whole-title page is the URL the Insight cites. Capturing the whole page is reasonable, and trimming it would break the raw-bytes match.
  • Copyright. California statutes and Covered California's public board papers raise no concern.
  • Tests. No test reads the capture files. The source-conflict ratchet scans comments in the package only.
  • Changelog. changelog.d/ca-premium-subsidy-source-captures.added.md is a top-level fragment with clear wording. .added follows the precedent of Capture sources for eight source-conflict register entries; pin Hawaii's claimable filer #10399 (source-conflict-register-captures.added.md), an earlier capture-only PR.
  • Partner tests. No file under policyengine_us/tests/policy/baseline/partners/** is touched.

Axiom line assessment

axiom: n/a: source captures for the source-conflict register; no model change is valid. The PR adds no variable, parameter or test and changes no policy behavior; it is register infrastructure. The impact: none line is also accurate.

The related register work is tracked in rulespec-us#2053, an OPEN draft PR. It stays draft and red on source-conflicts until this PR merges, because verify refuses a commit outside main. That is expected, not a defect here.

CI status

gh pr checks 10672 at head c745d21f5b, re-checked at 16:02 UTC: 31 pass, 5 pending, 0 fail.

  • Passing: PR validation (lock, guard tests, lint, changelog), Quick Feedback, Package and compatibility, Household API Partners, Microsimulation, all Baseline shards, all nine Rest Python shards, and Contrib congress, other-shard-2a, other-shard-2b and states-shard-3.
  • Still running: Contrib other-shard-1, other-shard-3, states-shard-1, states-shard-2 and states-shard-4, started 15:41 UTC.
  • The PR touches nothing those suites load, so a failure there would be unrelated to it.

Branch status

The branch is 3 commits ahead of main and 8 behind. git merge-tree --write-tree PolicyEngine/main c745d21f5b merges cleanly, giving tree 84111ae0. Since the merge base, main has changed only source_conflicts/candidates.yaml, adding unrelated LIHEAP candidates; that change doesn't overlap this PR. GitHub reports MERGEABLE, blocked only on review.

Verdict: APPROVE

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving per the review above: 0 critical, 0 should, 2 optional suggestions. Four contrib shards were still running at approval (none failing, and the PR touches nothing they load); please confirm CI finishes green before merging.

This branch has not been deployed

No deployments
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.

2 participants