Skip to content

Cite current Ohio PFCC and New Mexico CCAP rules - #10417

Merged
PavelMakarchuk merged 3 commits into
mainfrom
oh-nm-ccap-current-rule-references
Oct 29, 2026
Merged

PavelMakarchuk merged 3 commits into
mainfrom
oh-nm-ccap-current-rule-references

Conversation

@PavelMakarchuk

@PavelMakarchuk PavelMakarchuk commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

This PR follows up #10410. That PR updated the Ohio and New Mexico sources.yaml income lists. The other Ohio PFCC and New Mexico CCAP files still cited only the rules that were replaced. This PR adds the current rules to those files and leaves the two sources.yaml files to #10410.

I read every source again on 2026-10-23.

Ohio: OAC 5180:6-1-03 (reference and comment changes only)

OAC 5180:6-1-03 (effective 2026-08-01) replaced OAC 5180:2-16-03 (effective 2022-02-27). I compared the two authenticated PDFs paragraph by paragraph.

  • Each paragraph that the files cite has the same letter and the same substance in both rules: (C), (D), (D)(1), (D)(4)(a), (F)(1), (F)(8), (H)(1)-(2), (H)(3)(b), (c) and (j).
  • (F)(1) still excludes the earnings of a "minor child" who is a full-time student and gives no age, so minor_age_limit stays 18.
  • The 2026 rule adds (C)(1)(h), striker pay, as earned income. PolicyEngine has no striker-pay variable, so earned_sources does not change.
  • The 2026 rule adds (I)(5), kinship care payments. Items (I)(5)-(25) of the 2022 rule are (I)(6)-(26) of the 2026 rule. None of the files in this PR cite those items.

Files: earned_sources.yaml, net_loss_sources.yaml and minor_age_limit.yaml get both references, with page anchors. oh_ccap_countable_income.py, oh_ccap_owf_basic_assistance.py, oh_ccap_eligible.py and oh_ccap_income_eligible.py also get both references. The last two cited 5180:2-16-03 next to 5180:6-1-02. The three OH test files get updated comments.

New Mexico: 8.9.3 NMAC

8.9.3 NMAC has three versions. The SRCA compiled page (08.009.0003.html) shows only the first one with its 2023 amendment.

Version Effective Source Notes
8.9.3 NMAC (new rule, replaced 8.15.2) 2022-11-01 NM Register XXXIII-20; SRCA compiled page Same text as 8.15.2 for every cited provision. The work/education requirement is 8.9.3.11.H (it was 8.15.2.11.I).
Amendment 2025-11-04 NM Register XXXVI-21; ECECD integrated text 8.9.3.9.H: no income cap. 8.9.3.11.E: citizenship no longer affects eligibility. 8.9.3.11.G: ages 13 to [18] 19. 8.9.3.12: the 250%/425% limits are removed. 8.9.3.13.E: copayments are waived.
Repeal and replacement 2026-09-09 NM Register XXXVII-17 New section numbers: eligibility is 8.9.3.10, recertification 8.9.3.11, copayment conditions 8.9.3.12, waitlist 8.9.3.13, copayments 8.9.3.14, payment 8.9.3.19. 8.9.3.7(I)(3): a child is school age at five years old by September 1.

Each NM parameter and variable now cites 8.15.2 (before 2022-11-01), 8.9.3 (2022-11-01 to 2026-09-08) and the 2026 rule. Where the 2025 amendment matters, it also cites the 2025 text. Each title gives the paragraph and the dates. The 2026 PDF references have page anchors.

Value changes

  1. eligibility/special_needs_child_age_limit.yaml: 19 from 2025-11-04, not from 2026-05-20. The 2025-11-04 amendment of 8.9.3.11.G changed "between the ages of 13 and 18" to "between the ages of 13 and 19". The 2026 rule keeps this in 8.9.3.10.G. Add court-supervision eligibility for child-care programs #9543 dated the age-19 limit from SB 241 (2026-05-20) because the SRCA page still showed 18. SB 241 Section 4(B) sets the same limit in statute and stays as a reference. Monthly periods read parameters on the first of the month, so the model applies age 19 from December 2025.
    • court_supervision.yaml: the before/after pair (Cases 3-4) moves from 2026-05/2026-06 to 2025-11/2025-12. The other cases do not change.
  2. rates/age_group/months.yaml: school age starts at 60 months from 2026-09-09. 2026 8.9.3.7(I)(3) defines school age as "at least five years old by 12:01 a.m. on September 1 of the school year". 8.9.3.19(D) names September 1, 2026, but the rule took effect on its publication on 2026-09-09: 8.9.3.5 NMAC gives that date, and NMSA 14-4-5 makes no rule "valid or enforceable until it is filed with the records center and published in the New Mexico Register". Following the statute, the threshold starts 2026-09-09, so the monthly model first applies it in October 2026. source_conflicts/candidates.yaml records this choice as us-nm:ccap-school-age-start-date.
    • Age in whole years only approximates the September 1 cutoff: the model makes every five-year-old school age, but a child who turns five after September 1 stays preschool for that school year. The parameter comment says this.
    • nm_ccap_age_group.yaml: new Cases 7-11. A five-year-old is preschool in 2026-08 and 2026-09 and school age in 2026-10; 59 months is preschool in 2026-10. Case 11 (2027-03) pins the whole-year approximation and says so.
    • Effect: for a five-year-old in a 2-star center, the full-time rate changes from $735 (preschool) to $689 (school age). The 2026 rate tables match the 2025-11-04 rates.

The values of the other NM parameters stay the same. The rule history agrees with them:

  • copay/waived: true from 2025-11-01. 8.9.3.13.E (2025) waives copayments. Under 8.9.3.12 and 8.9.3.14 (2026), copayments apply only after a fiscal trigger and not before 2027-03-01.
  • income_limit_in_effect, fpl_limit/initial and fpl_limit/continuation: no income limit from 2025-11-01. 8.9.3.9.H (2025) has no income cap, and the 2026 rule has no income limit. The 2022 rule (8.9.3.9.F-G) codifies 200%/250%, and 400%/425% for essential workers. The comments now say this.
  • immigration_test_in_effect: false from 2025-11-01. 8.9.3.11.E (2025) and 8.9.3.10.E (2026) codify this.
  • child_age_limit: 13 in every version.

Other corrections

  • nm_ccap_monthly_rate.yaml now cites the rate tables and units of service in 8.9.3.17 NMAC (formerly 8.15.2.17; 8.9.3.19 from 2026-09-09), not the copayment paragraph 13.C.
  • fpl_limit/initial.yaml and fpl_limit/continuation.yaml no longer call the codified ceilings "superseded": 8.9.3 NMAC kept them in force from 2022-11-01 until the 2025-11-04 amendment. The backlog entry us-nm:ccap-income-ceilings now lists 8.9.3.9(F)-(G) and 8.9.3.12 NMAC too.
  • nm_ccap.py said that 8.15.2.13.C has providers paid "the lesser of the reimbursement rate and the provider's actual charge". 8.15.2.13.C sets the copayment by service unit. The rule that reduces the department's payment by the copayment is 8.15.2.7.C(5), and 8.9.3.7.C(8) in the 2026 rule. The cap at actual expenses is the PolicyEngine childcare pattern. The comment now says this.

Not in this PR (follow-ups)

  • Fix stale comments and references in ten benefit income lists #10410 NM sources.yaml: from 2026-09-09 the income rule is 8.9.3.10.C. The paragraph numbers are the same.
  • 2026 qualifying activities (8.9.3.10.H): the list adds part-time study (6 credit hours), TANF receipt, homelessness, school attendance under age 21, CARA services, grandparents raising a grandchild and foster parents. nm_ccap_activity_eligible models only work and full-time study, plus meets_ccdf_activity_test. The variable comment now says this.
  • Service units (2025-11-04): part time 3 (25%) is removed. service_unit_fraction.yaml still has PT3.
  • Full-time threshold (2025-11-04): full-time care is "a minimum of 29 hours per week" (2025 integrated text, 8.9.3.11.I(3), page 11; 2026 rule, 8.9.3.10.I(4) and 8.9.3.19.E). rates/service_unit/hours.yaml still uses 30 hours from the 2023 flyer.
  • Source-conflict register: move us-nm:ccap-school-age-start-date from source_conflicts/candidates.yaml to rulespec-us known-source-conflicts.yaml and mark the deciding line, once this PR is on main.
  • Copay chart 2023-08-01 to 2025-11-03 (8.9.3.13.D): the rule codifies it, but the model does not use it. The chart starts at 0.29% of income above 185% FPL. The LFC brief says $0 at or below 200% FPL.
  • Ohio: other PFCC files still cite the 5180:2-16 rules that the 5180:6-1 rules replaced: 2-16-01 (oh_ccap_child_age_group.py, oh_ccap_special_needs.py, oh_ccap_eligible.py, oh_ccap_eligible_child.py), 2-16-05 (oh_ccap_copay.py, oh_ccap.py) and 2-16-09 (oh_ccap_has_special_accommodations.py, oh_ccap_rate_with_addons.py).

Tests

The branch is merged with main (2026-10-29). Results after the review changes:

  • make format: no changes.
  • NM CCAP YAML (tests/.../nm/ececd/ccap): 123 passed (38 + 85), including new Cases 7-11 in nm_ccap_age_group.yaml; OH CCAP YAML also passed on the merged tree.
  • Code-health guards (test_source_conflicts, test_reference_urls, test_parameter_yaml_keys, test_known_dead_reference_urls, test_no_concatenated_reference_urls): 257 passed.
  • Before the review: OH CCAP YAML 140 passed; full tests/code_health 430 passed, 1 skipped.

axiom: TheAxiomFoundation/rulespec-us#1956 queued (8.9.3.11.G NMAC as amended 2025-11-04; 8.9.3.7(I)(3) and 8.9.3.19(D) NMAC effective 2026-09-09); n/a: reference and comment changes only (OAC 5180:6-1-03; other 8.9.3 NMAC citations)

🤖 Generated with Claude Code

Ohio: add OAC 5180:6-1-03 (effective 2026-08-01) next to OAC
5180:2-16-03 in the PFCC parameters, variables and tests. The cited
paragraphs keep their letters and substance; only (I)(5)-(25) moved to
(I)(6)-(26).

New Mexico: add 8.9.3 NMAC (2022-11-01), its 2025-11-04 amendment and
the 2026-09-09 replacement rule next to 8.15.2 NMAC. Apply the age-19
special-supervision limit from the 2025-11-04 amendment of 8.9.3.11.G
instead of from SB 241 (2026-05-20), and make five-year-olds school age
from 2026-09-01 under the 2026 8.9.3.7(I)(3) and 8.9.3.19(D).

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

DTrim99 commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Cite current Ohio PFCC and New Mexico CCAP rules

Summary

The PR updates the Ohio PFCC and New Mexico CCAP files that #10410 does not touch so they cite the current rules: OAC 5180:6-1-03 (effective 2026-08-01) and the three versions of 8.9.3 NMAC (2022-11-01, the 2025-11-04 amendment, and the 2026-09-09 replacement rule). I read every new source again: the two authenticated Ohio PDFs, the SRCA 8.15.2 and 8.9.3 pages, the ECECD 2025 integrated text, the NM Register XXXVI-21 filing and the 2026 replacement rule (NM Register XXXVII-17). Their sha256 hashes match the ones in rulespec-us#1956.

  • Ohio: reference and comment changes only. Every cited paragraph has the same letter and substance in both rules, and every page anchor is correct.
  • New Mexico: two value changes, both correct in substance and both tested so that a mutation would fail.
    • special_needs_child_age_limit is 19 from 2025-11-04. The 2025 amendment of 8.9.3.11.G reads "between the ages of 13 and [18] 19".
    • The school-age threshold in rates/age_group/months.yaml is 60 months from 2026-09-01, per 8.9.3.7(I)(3) and 8.9.3.19(D).
  • Other NM files: only citations and comments change, and their values still agree with every version of the rule.

Three things should be fixed before merge:

  1. Start date of the age-category change (main issue). The 2026-09-01 date comes before the rule's own effective date. That contradicts 8.9.3.5 NMAC and NMSA 14-4-5, and it doesn't follow the convention the PR uses for the age-19 change.
  2. Wrong rate citation. The new citation in the monthly-rate test header points at the copayment paragraph instead of the rate section.
  3. Incomplete page list. One variable's PDF page comment leaves out the page that holds the activity list it models.

Full CI has not run because the PR is a draft. On the tree merged with main, I ran the targeted NM and OH YAML files and the reference code-health guards locally, and all passed.

Critical (must fix)

None.

Should address

S1. rates/age_group/months.yaml:41 (and the comment at lines 6-11): the school-age threshold starts on 2026-09-01, but the rule took effect on 2026-09-09.

What the sources say:

  • The 2026 replacement rule, page 1: "8.9.3.5 EFFECTIVE DATE: September 9, 2026, unless a later date is cited at the end of section."
  • 8.9.3.19(D), page 18: "Effective September 1, 2026, a preschool child's placement category will be changed to a school age placement if the child's 5th birthday is prior to September 1 of that year."
  • NMSA 14-4-5 (State Rules Act), quoted in each NM Register issue: "No rule shall be valid or enforceable until it is filed with the records center and published in the New Mexico Register ... Unless a later date is otherwise provided by law, the effective date of a rule shall be the date of publication in the New Mexico register." (example NM Register page)

So September 1 is an earlier date, not a later one, and it can't be enforced before publication on 2026-09-09.

The PR body acknowledges this: "The rule itself took effect 2026-09-09. I used the date that the section states." rulespec-us#1956 lists the same point as open point 2. Three problems follow:

  • Statute-first rule. CLAUDE.md and CONTRIBUTING.md#source-conflicts require following the statute (here NMSA 14-4-5, which 8.9.3.5 repeats) over a conflicting date, and registering any such choice. The file has no # Source conflict marker, and the backlog has no entry for this.
  • Inconsistent convention within the PR. For the age-19 change, the PR encodes the exact effective date (2025-11-04), so the monthly model first applies it in December 2025. The comment explains: "Monthly periods resolve parameters at the first of the month". The same convention here gives 2026-09-09, so October 2026.
  • Inconsistent with the file's own references. They date the old I(2) definition "2022-11-01 to 2026-09-08" and the new one "from 2026-09-09", but the bracket switches on 2026-09-01.

Reach: one month (September 2026) for every NM CCAP child aged five. For example, the 2-star center full-time rate is $689 instead of $735.

Fix: change 2026-09-01: 60 to 2026-09-09: 60. Say in the comment that 8.9.3.19(D) names September 1 but 8.9.3.5 and NMSA 14-4-5 make the change effective on 2026-09-09, so the monthly model first applies it in October 2026. Then:

If you want to keep September 1 (for example, because ECECD moved placements on that date), register a us-nm entry in the source-conflict register and mark the deciding line instead.

S2. nm_ccap_monthly_rate.yaml:2: the rate lookup cites the copayment paragraph.

The header now reads "rate flyer, effective August 2023; 8.9.3.13.C NMAC, formerly 8.15.2.13.C". In both rules, Subsection 13.C is about copayments: 8.9.3.13.C reads "Each child's copayment will be adjusted based on the units of services described in Subsection E of 8.9.3.17 NMAC" (SRCA 8.9.3). The PR body says the same about 8.15.2.13.C ("8.15.2.13.C sets the copayment by service unit"), and it fixed that citation in nm_ccap.py, but it carried the copayment section into this header as the authority for rates.

The rate tables and units of service are in these sections:

  • 8.15.2.17 (PAYMENT FOR SERVICES).
  • 8.9.3.17.E and G-J from 2022-11-01. In the 2025 integrated text, the rate tables are on file pages 16-19.
  • 8.9.3.19.E and G-J from 2026-09-09 (replacement rule, page 18 onward).

Fix: cite 8.9.3.17 (formerly 8.15.2.17; 8.9.3.19 from 2026-09-09) for the rate tables.

S3. nm_ccap_activity_eligible.py:13: # PDF pages 3, 5, 10 leaves out page 11.

On page 10 of the 2026 rule, 8.9.3.10.H has only its heading ("H. Qualifying Activity or Status: To be eligible to participate in the Child Care Assistance Program,"). The list is on page 11:

  • "(1) employed";
  • "(2) a full-time student and enrolled in at least 12 credit hours";
  • items (3)-(11), which are the part-time study, TANF, homelessness and other statuses that the new formula comment describes.

The comment's page list doesn't show the provisions the variable models.

Fix: # PDF pages 3, 5, 10-11.

Suggestions

  1. fpl_limit/continuation.yaml:13 and fpl_limit/initial.yaml:13: drop "superseded". Both now say the codified ceiling is in "8.15.2.12, then 8.9.3.12 from 2022-11-01", and then call it "the superseded codified 250%" (or 200%). 8.9.3 NMAC was adopted on 2022-11-01, after the May 2022 operative expansion. It codified 200%/250%, or 400%/425% for essential workers in priority four plus (SRCA 8.9.3.9.F-G and 8.9.3.12), and it stayed in force until the 2025-11-04 amendment removed the caps. So the codified ceiling was not superseded.
    • Rewording: say instead that PolicyEngine follows the operative ceilings in the LFC brief over the codified ones.
    • Backlog entry: the existing entry us-nm:ccap-income-ceilings in source_conflicts/candidates.yaml cites only 8.15.2.9/8.15.2.12. Consider adding 8.9.3.9.F-G and 8.9.3.12 (2022-11-01 to 2025-11-03) to it. Neither change changes ratchet counts.
  2. Document how coarse the age approximation is. With whole-year ages, every five-year-old is school age from September 2026. Under 8.9.3.7(I)(3)(c) and 19.D, a child who turns five after September 1 stays preschool for that school year. By late in the school year (spring and summer), that covers most children of integer age five. A sentence in the months.yaml comment would help users read the results. So would a test like Missouri and TANF Earned Income Exemption and Disregards #1956's A8, marked as an approximation.
  3. Follow-up list: add the full-time threshold. From 2025-11-04, full-time care has "a minimum of 29 hours per week" (2025 integrated text, 8.9.3.11.I(3), page 11; 2026 rule, 8.9.3.10.I(4) and 8.9.3.19.E). rates/service_unit/hours.yaml still uses 30 hours from the 2023 flyer. This is outside the PR's files, like the PT3 removal the body already lists.
  4. Axiom line.
    • Wording: the trailing sentence ("The Ohio and other NM changes are reference metadata only") works as an n/a for those parts. Writing it as n/a: reference and comment changes only (OAC 5180:6-1-03; other 8.9.3 NMAC citations) would make that explicit.
    • If you take S1: update Missouri and TANF Earned Income Exemption and Disregards #1956 to match the new date.

Verified correct

  • Ohio, OAC 5180:6-1-03.
    • The authenticated PDF says "Effective: August 1, 2026".
    • Cited paragraphs:
      • (C) and (D) are on file pages 1-2.
      • (D)(1) and (D)(4)(a) are on page 2.
      • (F)(1) and (F)(8) are on page 3.
      • (H)(3)(b), (c) and (j) are on page 4.
      • The 2022 rule has the same letters on pages 1-2, 2, 4 and 5.
      • Every new anchor (#page=1/2/3/4 for 2026 and #page=1/2/4/5 for 2022) and every quoted multi-page title is right.
    • Body claims checked:
      • (C)(1)(h) "Striker pay and benefits" and (I)(5) "Federal and state kinship care payments" are new in 2026.
      • (F)(1) still says "minor child" with no age.
    • No Ohio logic changes.
  • New Mexico versions and numbering.
    • The 2025 filing (NM Register XXXVI-21) says "effective 11/04/2025" and "13 and [18] 19".
    • The 2026 rule is "Rp" effective 9/9/2026.
    • Section numbers: eligibility is 8.9.3.10 (C, E, F, G, H on pages 9-11), copayment conditions 8.9.3.12, waitlist 8.9.3.13, copayments 8.9.3.14 (pages 12-13), payment 8.9.3.19 (D on page 18).
    • Under 8.9.3, the copayment definition is 7.C(5) in the 2022 rule and 7.C(8) (page 2) in the 2026 rule. In 8.15.2 it is also 7.C(5). These back the corrected nm_ccap.py comment, which also cites 14.E on page 13.
  • NM page anchors and page comments. Every one matches its paragraph except S3:
    • 2025 text: page 6 (9.H), page 11 (11.E-G), pages 12-13 (12 and 13.A-E).
    • 2026 text: pages 3, 9, 10, 12, 13 and 18.
    • Every multi-page title is quoted with a #page a-b or #page a,b suffix, and no href has a page list. This follows CLAUDE.md.
  • Value change 1 (special supervision).
    • The rule: 8.9.3.11.G as amended 2025-11-04 (2025 text, page 11) and 8.9.3.10.G from 2026-09-09 (page 10) both read "between the ages of 13 and 19".
    • The tests: court Cases 3 (2025-11, 18 → false) and 4 (2025-12, 18 → true) bracket the date. Reverting to 2026-05-20 fails Case 4, and an earlier date fails Case 3.
    • The only NM caller is nm_ccap_eligible_child.
  • Value change 2 (age categories).
    • 8.9.3.7(I)(3)(c)-(d) (page 3) is quoted correctly in the comment.
    • Cases 7-9 kill both mutations: keeping the threshold at 72 fails Case 8, and putting it at 59 or lower fails Case 9.
    • The rates match both the 2025 and 2026 tables (2-star center preschool full time $735, school age $689).
    • A local probe gave $183.75 (August 2026) and $172.25 (September 2026) for a five-year-old at the default part-time-3 unit, which is 0.25 × 735 and 0.25 × 689.
  • Unchanged NM values agree with the rule history.
    • copay/waived: true from 2025-11-01. 2025 13.E says "Copayments are currently waived". The 2026 rule's 14.A has the department pay copayments for families at or below 600% FPL, and 14.D starts the schedule "Effective March 1, 2027, when implemented in accordance with 8.9.3.12".
    • No income limit: 2025 9.H "do not have an income cap", and the 2026 rule has no cap.
    • Immigration test off: 2025 11.E and 2026 10.E.
    • child_age_limit: 13.
  • Hand-checked expectations (10).
    • Court Case 1, 2025-01, limit 18: 13 without court supervision → false; 17 with court → true; 18 with court → false; 19 with court → false.
    • Court Case 3: 2025-11, 18 < 18 → false.
    • Court Case 4: 2025-12, 18 < 19 → true.
    • Court Case 7: 2026-06, 19 < 19 → false.
    • Court Case 10: 2027-01 → [true, false, true].
    • Age group Case 7: 2026-08, 5.0 × 12 = 60 against thresholds 0/24/36/72 → PRESCHOOL.
    • Age group Case 8: 2026-09, 60 ≥ 60 → SCHOOL_AGE.
    • Age group Case 9: 4.9167 × 12 = 59.0004 < 60 → PRESCHOOL.
    • Eligible-child Case 5: 2025-01, delay, 18 < 18 → false.
    • Rate probe: $183.75 and $172.25, as above.
  • Source-conflict ratchet (Tie source-conflict markers to the register shared with Axiom #10287). None of the 23 changed variable and parameter files has a comment matching CONFLICT_COMMENT_RE, and none is in KNOWN_UNMARKED, so counts neither grow nor drop. I scanned them with the guard's own comment reader on the tree merged with main. Words like "codified vs. operative" and "states that" don't match the pattern.
  • Changelog. changelog.d/oh-nm-ccap-current-rule-references.fixed.md is a top-level file with a fitting type and an accurate description.

Axiom line assessment

axiom: TheAxiomFoundation/rulespec-us#1956 queued is valid.

  • Status: Missouri and TANF Earned Income Exemption and Disregards #1956 is OPEN and labelled pe-parity. It was filed 2026-10-27 against head c109e38868, the current head.
  • Dispatch-ready:
    • module paths (us-nm/regulations/nmac/8/9/3/11.yaml and .../7.yaml, plus a dated-root plan for the 2026 rule);
    • corpus citations with scope and pin status;
    • verbatim text of 8.9.3.11.F-G (2022 and 2025), 8.9.3.10.F-G and 8.9.3.7(I)(3) (2026), 19.D, 8.9.3.5 and SB 241 §4(B)/§5(G);
    • required outputs;
    • companion tests hand-derived from the rule text.
  • Blocker recorded: the pinned corpus release lacks the scopes, the 2026 rule is not in axiom-corpus, and each billed run needs approval.
  • Scope: it covers exactly the two substantive NM changes. The Ohio changes and the other NM edits are citations and comments with no policy effect, so the line's trailing "reference metadata only" is accurate, and "n/a" would be the right label for those parts (Suggestion 4).
  • If S1 is adopted: Missouri and TANF Earned Income Exemption and Disregards #1956's provision 2 (2026-09-01, open point 2, test A10) needs the same update.

CI status

The PR is a draft. The "Pull request" workflow run for the current head (event pull_request, 2026-10-23) skipped all 7 jobs:

  • Baseline tests;
  • Contrib tests;
  • Household API Partners;
  • PR validation;
  • Package and compatibility;
  • Python tests;
  • Quick Feedback.

Full CI has not run, and nothing is pending.

Because CI hasn't run, I ran these locally on the tree merged with main (policyengine-core 3.33.12; CI may use a newer core):

  • 8 NM/OH YAML files, 104 cases, all passed: court_supervision, nm_ccap_age_group, nm_ccap_eligible_child, nm_ccap_monthly_rate, NM integration, nm_ccap_copay, oh_ccap_countable_income, OH integration.
  • 5 code-health files, 158 tests, all passed: test_reference_urls, test_parameter_yaml_keys, test_known_dead_reference_urls, test_no_concatenated_reference_urls, test_unemployment_compensation_readers.

When the PR leaves draft: Rest (Python shard 3) currently fails test_social_security_input_state_machine on main itself under policyengine-core 3.33.13. That failure would be a main-caused CI note, not a finding for this PR.

Branch status

Verdict: REQUEST_CHANGES

@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.

Requesting changes: 0 critical, 3 should (New Mexico school-age change dated 2026-09-01 although the rule takes effect 2026-09-09; the rate file cites 8.9.3.13.C instead of 8.9.3.17; a page list omits page 11). The Ohio changes and both New Mexico value changes otherwise check out. Full CI hasn't run because the PR is a draft. Full report in the comment above.

PavelMakarchuk and others added 2 commits October 29, 2026 09:55
Address review on #10417:
- Start the 60-month school-age threshold on 2026-09-09, the date
  8.9.3.5 NMAC and NMSA 14-4-5 make the replacement rule effective,
  instead of the September 1 date in 8.9.3.19(D). The monthly model
  first applies it in October 2026. Record the choice in
  source_conflicts/candidates.yaml (us-nm:ccap-school-age-start-date).
- Test September 2026 as preschool and October 2026 as school age, and
  pin the whole-year age approximation in a marked case.
- Cite 8.9.3.17 (rates and units of service) in the monthly-rate test.
- Add page 11 to the activity variable's 2026 page list.
- Stop calling the codified income ceilings superseded, and list
  8.9.3.9(F)-(G) and 8.9.3.12 NMAC in us-nm:ccap-income-ceilings.

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

PavelMakarchuk commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator Author

Thanks for the review. I checked each item against the source and agree with all three. The fixes are in bc6f332; the branch is also merged with main (e846d78).

Item Fix Evidence
S1. School-age change dated 2026-09-01; the rule takes effect 2026-09-09 rates/age_group/months.yaml: 2026-09-09: 60. The comment says the monthly model first applies it in October 2026. nm_ccap_age_group.yaml: a five-year-old is preschool in 2026-08 and 2026-09 (Cases 7-8) and school age in 2026-10 (Case 9); 59 months is preschool in 2026-10 (Case 10). The choice is recorded in source_conflicts/candidates.yaml as us-nm:ccap-school-age-start-date (follows: statute, state: ruled). 2026 rule, page 1: "8.9.3.5 EFFECTIVE DATE: September 9, 2026, unless a later date is cited at the end of section." NMSA 14-4-5, as quoted in each NM Register issue: "No rule shall be valid or enforceable until it is filed with the records center and published in the New Mexico Register as provided by the State Rules Act. Unless a later date is otherwise provided by law, the effective date of a rule shall be the date of publication in the New Mexico register." 8.9.3.19(D)'s "Effective September 1, 2026" is earlier, not later.
S2. Rate test cites 8.9.3.13.C (copayments) nm_ccap_monthly_rate.yaml header now cites the rate tables and units of service in 8.9.3.17 NMAC (formerly 8.15.2.17; 8.9.3.19 from 2026-09-09). SRCA 8.9.3.13.C: "Each child's copayment will be adjusted based on the units of services described in Subsection E of 8.9.3.17 NMAC". 8.9.3.17 is PAYMENT FOR SERVICES; the 2026 rule moves it to 8.9.3.19.
S3. Page list omits page 11 nm_ccap_activity_eligible.py: # PDF pages 3, 5, 10-11. 2026 rule: page 10 has only the 8.9.3.10.H heading ("Qualifying Activity or Status"); items (1) "employed" to (11) are on page 11.
Suggestion 1. "superseded" Both fpl_limit comments now say PolicyEngine follows the operative LFC ceilings over the codified ones. us-nm:ccap-income-ceilings now lists 8.9.3.9(F)-(G) and 8.9.3.12 NMAC (2022-11-01 to 2025-11-03) and the essential-worker 400%/425% ceilings. SRCA 8.9.3.9.F-G and 8.9.3.12 (2022 rule) were in force until the 2025-11-04 amendment.
Suggestion 2. Approximation The months.yaml comment explains it. Case 11 (2027-03, age five, SCHOOL_AGE) pins it and is marked as an approximation. 8.9.3.7(I)(3)(c) and 8.9.3.19(D): a child who turns five after September 1 stays preschool for that school year.
Suggestion 3. Full-time threshold Added to the PR body's follow-up list. 2025 integrated text 8.9.3.11.I(3), page 11, and 2026 8.9.3.10.I(4) and 8.9.3.19.E: "a minimum of 29 hours per week".
Suggestion 4. Axiom line Now ... queued (...); n/a: reference and comment changes only (OAC 5180:6-1-03; other 8.9.3 NMAC citations). rulespec-us#1956 is updated: open point 2 is decided (2026-09-09), test A10 is unblocked, and the head is bc6f332. —

Local results on the merged tree: NM CCAP YAML 123 passed; OH CCAP YAML passed; test_source_conflicts, test_reference_urls, test_parameter_yaml_keys, test_known_dead_reference_urls and test_no_concatenated_reference_urls 257 passed. The PR is out of draft, and the full CI run is queued.

@PavelMakarchuk
PavelMakarchuk marked this pull request as ready for review October 29, 2026 14:27
@DTrim99

DTrim99 commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator

PR Review (round 2): Cite current Ohio PFCC and New Mexico CCAP rules

Summary

The author fixed all three should-address items and took all four suggestions in one commit (bc6f332). The branch is also merged with main, and the PR is out of draft.

  • S1, start date. The school-age threshold now starts on 2026-09-09, the date 8.9.3.5 NMAC and NMSA 14-4-5 make the replacement rule effective. In the monthly model, a five-year-old is preschool in September 2026 and school age from October 2026. The tests pin both months. The choice is recorded as backlog item us-nm:ccap-school-age-start-date (follows: statute).
  • S2 and S3. The rate test now cites 8.9.3.17 (formerly 8.15.2.17; 8.9.3.19 from 2026-09-09), and the activity variable's page list now includes page 11.
  • Suggestions.
    • "Superseded" is gone, and the income-ceiling backlog item lists 8.9.3.9(F)-(G) and 8.9.3.12.
    • The age approximation is documented and pinned by a marked case.
    • The 29-hour threshold is on the follow-up list.
    • The axiom line has an explicit n/a part, and rulespec-us#1956 is updated to the new head and date.

I hand-checked every new or changed expectation and the comments against the #10287 ratchet. I also checked the new backlog entry against the guard's field rules. None of these turned up a problem. I found no new critical or should-address issues. Three small suggestions remain: the changelog wording, adding a page to one reference, and two stale cross-references.

Full CI ran for the first time now that the PR is out of draft. 27 checks pass, including every baseline YAML shard (all 11 nm_ccap_age_group.yaml cases), every Python shard and the source-conflict guard. The 6 contrib-reform shards were still running at my last check; the PR touches no contrib files.

Prior findings

Finding Status Evidence
S1. School-age change dated 2026-09-01, before the rule's effective date Fixed rates/age_group/months.yaml now has 2016-10-01: 72, 2026-09-09: 60. The comment says 8.9.3.19(D) names September 1 but the rule took effect on publication on 2026-09-09 (8.9.3.5 NMAC; NMSA 14-4-5), so the monthly model first applies it in October 2026. nm_ccap_age_group.yaml: Case 8 (2026-09, 60 months) is PRESCHOOL, Case 9 (2026-10, 60 months) is SCHOOL_AGE, and Case 10 (2026-10, 59 months) is PRESCHOOL. Reference titles ("2022-11-01 to 2026-09-08" for I(2), "from 2026-09-09" for I(3)) now agree with the bracket. The choice is recorded in source_conflicts/candidates.yaml as us-nm:ccap-school-age-start-date (statute and regulation sources, follows: statute, state: ruled). The PR body follow-ups include moving it to the shared register and marking the line once the PR is on main. rulespec-us#1956 open point 2 now reads "decided: 2026-09-09", and test A10 follows it.
S2. Rate test header cited 8.9.3.13.C (copayments) Fixed nm_ccap_monthly_rate.yaml:1-5 now reads "rate tables and units of service in 8.9.3.17 NMAC, formerly 8.15.2.17, and 8.9.3.19 NMAC from 2026-09-09". This matches the 8.9.3.17(G)/(J) references already in rates/center.yaml.
S3. Page comment "3, 5, 10" left out page 11 Fixed nm_ccap_activity_eligible.py:13 is now # PDF pages 3, 5, 10-11 above the #page=3 href. This follows the CLAUDE.md format for variable reference tuples.
Suggestion 1: "superseded" and the income-ceiling backlog entry Fixed Both fpl_limit comments now say "PolicyEngine follows the operative ceilings in the LFC brief ... over the codified 250%" (200% in initial.yaml). us-nm:ccap-income-ceilings adds the source "8.9.3.9(F)-(G) NMAC and 8.9.3.12 NMAC (2022-11-01 to 2025-11-03)", restates the codified 200%/250% and 400%/425% essential-worker ceilings until the 2025-11-04 amendment, and lists this PR.
Suggestion 2: document the age approximation Fixed The months.yaml comment says every five-year-old is school age in the model, although a child who turns five after September 1 stays preschool for that school year (8.9.3.7(I)(3)(c), 8.9.3.19(D)). Case 11 (2027-03, age 5.0, SCHOOL_AGE) is named and commented as an approximation.
Suggestion 3: 29-hour full-time threshold Fixed The PR body follow-up list has it: "a minimum of 29 hours per week" (2025 integrated text 8.9.3.11.I(3), page 11; 2026 rule 8.9.3.10.I(4) and 8.9.3.19.E), with rates/service_unit/hours.yaml still at 30.
Suggestion 4: axiom line Fixed It now ends "; n/a: reference and comment changes only (OAC 5180:6-1-03; other 8.9.3 NMAC citations)". #1956 names head bc6f332675 and the 2026-09-09 date.

New findings

Critical: none.

Should address: none.

Suggestions:

  1. The changelog still says "from September 2026". changelog.d/oh-nm-ccap-current-rule-references.fixed.md reads "classify New Mexico five-year-olds as school age from September 2026". The model now gives PRESCHOOL for September 2026 (Case 8) and SCHOOL_AGE from October 2026. The month is right for the law (September 9) but not for the model. Suggested wording: "classify New Mexico five-year-olds as school age under the rule effective 2026-09-09 (October 2026 in monthly periods)". This would match the age-19 clause, which names the amendment date. The Missouri and TANF Earned Income Exemption and Disregards #1956 title ("from September 2026") could get the same edit.
  2. The age-category reference doesn't show the page with the effective date. The 2026-09-09 start date now rests on 8.9.3.5 NMAC, which is on file page 1 of the replacement rule. The months.yaml reference title ends #page 3,18, and nm_ccap_age_group.py has # PDF pages 3, 18. Neither lists page 1. The (from 2026-09-09) in the title states the date, so this is not wrong. Adding page 1 would let a reader verify the date from the reference: the title would end #page 1,3,18, and the comment would read # PDF pages 1, 3, 18. The href already opens page 3, and the first cited page could stay as the anchor or move to #page=1.
  3. Two cross-references are out of date.

Verified

  • Month boundary for S1 (by hand).
    • nm_ccap_age_group is a MONTH variable. It reads parameters(period) at the first day of the month and looks up age * 12 in months.yaml.
    • 2026-09 resolves at 2026-09-01, before 2026-09-09, so the school-age threshold is 72. 2026-10 resolves at 2026-10-01, so it is 60.
    • This is the same convention as the age-19 change: 2025-11-04 in the parameter, first applied in December 2025, with court Cases 3-4 bracketing it.
  • Every new or changed expectation (hand-checked).
    • Case 8, 2026-09, age 5.0: 60 months against 0/24/36/72 → PRESCHOOL.
    • Case 9, 2026-10, age 5.0: 60 ≥ 60 → SCHOOL_AGE.
    • Case 10, 2026-10, age 4.9167: 59.0004 < 60 → PRESCHOOL.
    • Case 11, 2027-03, age 5.0: threshold 60, 60 ≥ 60 → SCHOOL_AGE. Under 8.9.3.7(I)(3)(c), a child who is exactly five in March 2027 turned five after 2026-09-01 and would be preschool. The case is correctly labeled as pinning the approximation, not the rule.
    • Case 7, 2026-08, unchanged: 60 < 72 → PRESCHOOL.
    • All four new or changed cases key age and state_code by year, so the month periods build.
  • Mutation strength.
    • Reverting to 2026-09-01 fails Case 8.
    • Dating the change after 2026-10-01 fails Case 9.
    • A threshold of 59 or lower fails Case 10, and 61 or higher fails Case 9.
  • No other test depends on the old date. No NM CCAP test besides nm_ccap_age_group.yaml uses a period from 2026-09 to 2027 with a five-year-old. The only other late period is court Case 10 (2027-01), which doesn't read the age category.
  • Backlog example. The new entry's example (2-star licensed center, full time, $735 preschool against $689 school age) matches rates/center.yaml TWO_STAR from 2025-11-04 (PRESCHOOL 735, SCHOOL_AGE 689).
  • Backlog entry against test_source_conflicts.py.
    • The id us-nm:ccap-school-age-start-date is well formed, unique, and not in the vendored register.
    • Required fields are present: state: ruled and follows: statute are allowed values, and there are three sources of kinds statute and regulation.
    • years is program with a note, the code path is a tracked file, and the PR URL has the allowed form.
    • The URLs carry no private tokens. The d89c47bd… path segment is not a decision-queue id, and the UUID sits inside a URL path.
    • The author reports the guard passing locally.
  • Process. CONTRIBUTING.md#source-conflicts sends a conflict to the rulespec-us register and a # Source conflict marker. The marker can only name an entry in the pinned copy. Until then, the candidates file is where a not-yet-registered conflict goes, as its header says, and the PR body lists the move as a follow-up. That is enough for a choice that follows the statute.
  • Tie source-conflict markers to the register shared with Axiom #10287 ratchet, on the tree merged with main.
    • The head is 0 behind main, and its tree equals the git merge-tree result.
    • None of the 23 changed files under variables/ and parameters/ has a comment matching CONFLICT_COMMENT_RE or ATTEMPT_RE. That includes the new months.yaml lines ("8.9.3.19(D) dates ... but the rule took effect ...") and the reworded fpl_limit lines ("PolicyEngine follows the operative ceilings ... over the codified").
    • No NM or OH file is in KNOWN_UNMARKED, so counts neither grow nor drop.
  • Unchanged since round 1. The merge of main changed no NM ECECD or OH DCY file. The only shared file was candidates.yaml, and it merged without a manual resolution (the merge commit has no combined diff). The Ohio references, the other NM citations and the age-19 change are as verified in round 1.
  • Partner tests. No file under tests/policy/baseline/partners/** is touched.

Axiom

axiom: TheAxiomFoundation/rulespec-us#1956 queued (8.9.3.11.G NMAC as amended 2025-11-04; 8.9.3.7(I)(3) and 8.9.3.19(D) NMAC effective 2026-09-09); n/a: reference and comment changes only (OAC 5180:6-1-03; other 8.9.3 NMAC citations) is valid.

  • Queued part.
    • Missouri and TANF Earned Income Exemption and Disregards #1956 is OPEN, labelled pe-parity, and was updated 2026-10-29.
    • It names head bc6f332675 and matches the PR's current behavior: 2025-11-04: 19; 2026-09-09: 60, first applied in October 2026; Cases 1-11.
    • It stays dispatch-ready:
      • module paths (us-nm/regulations/nmac/8/9/3/11.yaml, .../7.yaml, and a dated-root plan for the 2026 rule);
      • corpus citations with scope and pin status;
      • verbatim text of 8.9.3.11.F-G (2022 and 2025), 8.9.3.10.F-G, 8.9.3.7(I)(3), 19.D and 8.9.3.5;
      • required outputs;
      • companion tests hand-derived from the rule text. A10 now follows the decided 2026-09-09 date, and A8 flags PolicyEngine's approximation.
    • The blockers are recorded: the pinned release lacks the scopes, the 2026 rule is not in axiom-corpus, and each billed run needs approval.
  • n/a part. The Ohio edits and the other NM edits change references and comments only. oh_ccap_* logic, the other NM parameter values and every NM formula are unchanged. "Reference and comment changes only" is a valid housekeeping n/a.
  • Housekeeping. Missouri and TANF Earned Income Exemption and Disregards #1956 still calls the PR a draft (Suggestion 3).

CI

The "Pull request" workflow run for head bc6f332675 started 2026-10-29 14:28 UTC. I re-checked gh pr checks 10417 at 15:16 UTC: 27 passed, 3 skipped (superseded umbrella entries from the draft-era run) and 6 pending.

  • Passed:
    • PR validation (lock, guard tests, lint, changelog);
    • Package and compatibility;
    • Household API Partners;
    • Quick Feedback. Its selective scope was too broad, so it deferred to the full suite.
    • Baseline: household, irs, reform, rest-a, rest-b, ssa-usda, contrib-hhs and states shards 1-4;
    • Python: Rest shards 1-6, Microsimulation, and the plan and check jobs;
    • Contrib other-shard-2a, 2b and 3.
  • What covers this PR:
    • States shard 1 ran the OH batch (all oh/dcy/ccap files passed).
    • States shard 2 ran the NM batch: all 11 nm_ccap_age_group.yaml cases passed, along with court_supervision, the eligibility files, integration, copay, countable income, monthly rate (31 cases) and service unit. The batch exit code was 0.
    • Rest Python shard 4 ran test_source_conflicts.py, and test_conflict_sounding_comments_do_not_grow, test_candidate_fields, test_candidates_are_public, test_candidates_are_not_yet_registered and test_candidates_have_unique_well_formed_ids all passed.
    • Rest Python shard 3 passed, so the earlier main-caused test_social_security_input_state_machine failure does not appear.
  • Still pending: Contrib states shards 1-4, other-shard-1 and congress, all started at 14:59 UTC. The PR changes no contrib reform or contrib test file.
  • Failures: none.
  • Local runs: none were needed, because CI ran the PR's test files at this head.

Branch

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 round 2: 0 critical, 0 should. All three round-1 shoulds and all four suggestions are done. Full report in the comment above. Six contrib shards were still pending (the PR touches no contrib files).

@PavelMakarchuk
PavelMakarchuk merged commit 6251341 into main Oct 29, 2026
40 checks passed
@PavelMakarchuk
PavelMakarchuk deleted the oh-nm-ccap-current-rule-references branch October 29, 2026 18:44
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