Repository navigation
Give North Carolina reduced-price school meal students the free tier - #9756
Conversation
North Carolina pays the reduced-price copay (S.L. 2023-134 § 7.58), so students who qualify for reduced-price meals eat at no cost. Add a by-state parameter for reduced-price copay coverage and apply it in school_meal_tier. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9756 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 4 1 -3
Lines 76 23 -53
Branches 2 0 -2
=========================================
- Hits 76 23 -53
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Cast the fancy-indexed bool parameter before combining it with the income test, cite G.S. 115C-264(a1) (S.L. 2025-89 § 2A.8) from 2025-07-01, carry the breakfast authority on the 2022-07-01 entry, use the first effective date in the registry, and test the 185% boundary. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…into nc-reduced-price-school-meals
…ate SY 2025-26 rates to July Set employment_income_before_lsr in the new school meal test cases so state TANF sees the earnings. Use the under-60% contiguous paid lunch rate (0.44) for SY 2025-26, matching the free and reduced rates, and key all SY 2025-26 reimbursement rates to 2025-07-01, when the USDA notice puts them in effect. Calendar 2025 now reads the SY 2024-25 rates. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…into nc-reduced-price-school-meals
…into nc-reduced-price-school-meals
…into nc-reduced-price-school-meals
Program ReviewPR #9756: Give North Carolina reduced-price school meal students the free tier (hua7450). Fixes #9755; follow-up #9789. What the PR does
Result
Path shorthand used below:
Source Documents
Branch Status
Critical (Must Fix)C1. The CO partner header cites Part 1 of C.R.S. 22-82.9 instead of Part 2 (Healthy School Meals for All).
Should AddressS1. The federal.yaml direct-input case no longer tests that a supplied
S2. The PR rewrites partner contract inputs beyond what the model change requires, and the required notification is not visible.
S3. The axiom line is not in a valid form.
S4. Reference titles include page numbers.
S5. The S.L. 2025-89 reference on line 113 cites pages 5-6 but links only page 5.
Suggestions1.
2. Since July 2025 the NC mandate binds local boards of education; the model applies it statewide.
3. Note that the 2011 breakfast coverage depends on appropriations.
4. The other 58 jurisdictions are set to false without research.
5. Tighten the copay parameter's references.
6. The CPI-U projection proxy probably understates future rates.
7. Add a test for the new projection mechanism.
8.
9. Keep the My Friend Ben additions to variables the partner requests.
10. The
11. The negative self-employment case no longer documents or tests what its name says.
12. The new parameter's description and label do not follow the house sentence form.
13. The programs.yaml NC entry: name style and effective date.
Pre-existing items (not counted):
Partner Contract TestsThe PR edits 11 partner contract files. Every changed expected value traces to one of four causes:
Before the PR, values were pinned at 7.15 with a 0.1 margin. The PR tightens margins to 0.01.
Classification
Effect on the contracts
CLAUDE.md requirement
PDF Audit Summary
Totals
Cal. Educ. Code 49501.5 and MA Acts 2023 c.28 were not reviewed, because no value depends on them. Validation Summary
Review Severity: REQUEST_CHANGES1 critical, 5 should address, 13 suggestions. APPROVE requires 0 critical and 0 should-address findings. Next Steps
|
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes per the program review above (#9756 (comment)). The core change is sound: all 54 NSLP/SBP rate cells for SY2024-25 to SY2026-27 match the Federal Register, the 0.46 to 0.44 paid-lunch fix and the NC effective dates are correct, and using the free tier for a state-covered copay gives the right dollar value. Items to address: the CO citation (Part 1 vs Part 2, 22-82.9-201) on a line this PR rewrote; page text in reference titles; the federal.yaml override case neutralized without a model reason; partner-test input rewrites (TX/Jackson County to MO counties, CA/CO/MA wages) without stated justification, with partner notification not visible on GitHub; and axiom: needed, which is not a valid axiom line.
…into nc-reduced-price-school-meals
…into nc-reduced-price-school-meals
Program Review — Round 2PR #9756: Give North Carolina reduced-price school meal students the free tier (hua7450). Fixes #9755; follow-up #9789. Round-2 scope
Path shorthand used below:
Status of Round-1 Findings
Round-1 suggestions
Critical (Must Fix)None. Should Address (remaining)S3. The axiom line uses
S5. Comma-separated
Suggestions
Delta Verification (fresh pass)
Partner Contract Tests
CI
Failures
Passes
Still running: Baseline household, Baseline states-shard-1, Contrib other-shard-1, Contrib states-shard-2 and Rest (Python + variables). A re-run is needed for a complete signal. At the round-1 head Review Severity: REQUEST_CHANGES0 critical, 2 should address (S3 axiom line; S5 multi-page anchors), 6 suggestions. APPROVE requires 0 critical and 0 should-address findings. Fixed since round 1:
Remaining fixes:
|
DTrim99
left a comment
There was a problem hiding this comment.
Round 2 (#9756 (comment)): the CO citation, the federal.yaml override case, the CA/CO/MA wage reverts, the TX-to-MO justification (TX now pays both reduced-price copays) and the reference-title page text are all fixed; no value regressions. Two items remain: (1) the axiom line's n/a doesn't fit a policy change, and the cited Axiom issues aren't pe-parity-labelled or dispatch-ready; (2) the new comma anchors (#page=5,6,32, #page=119,625) aren't valid PDF fragments, so pages 6, 32 and 625 can't be reached and the S.L. 2023-134 link regressed (use one single-page reference per cited page). Also re-run the partner API impact notice at the final head, since four partner files changed after the last successful post. The CI failures are runner-acquisition cancellations.
…into nc-reduced-price-school-meals
|
David, could you approve a scope exception to the Axiom parity requirement for this PR? This PR corrects the existing PEUS school-meal model and updates its reimbursement rates. Based on the program inventory discussed here, Axiom has no corresponding implemented school-meal program to synchronize. Its broader coverage is already tracked in rulespec-us #1001 and axiom-encode #1517, and the separate PEUS school-meal refactor is tracked in #9789. Please allow this correction to proceed without requiring implementation of the broader Axiom program as part of this PR. I understand the current contribution guide includes policy bug fixes, so the PR description explicitly marks |
PR Review (round 3): Give North Carolina reduced-price school meal students the free tierPR #9756 (hua7450). Fixes #9755; follow-up #9789. Round-3 scope
Summary
Path shorthand used below:
Status of Round-2 Findings
Round-2 suggestions
Critical (Must Fix)None. Should AddressS5 (narrowed). Split the two North Carolina session-law references into one entry per page, and take the page lists out of the titles.
Suggestions
Delta Verification (fresh pass on
|
| Item | Result |
|---|---|
NC reference hrefs (params/state_covers_reduced_price_copay.yaml:107, 120) |
Each is a single valid page. p. 119 shows s.7.58 ("school breakfasts and lunches at no cost ... reduced-price"). p. 5 shows s.2A.8(a) adding subsection (a1). Both support true (S5 for the titles) |
| Every other href in the PR scope | Each is a single page or an HTML link, and each shows its value:
|
Calendar-2028 projection (tests/school_meal_daily_subsidy.yaml:47-60) |
All 9 values recomputed from the at_defined_interval logic in policyengine-core:
|
Calendar-2025 comment (:15) |
Correct. With the SY 2025-26 rates dated 2025-07-01, January 1, 2025 reads SY 2024-25: 4.43 + 2.37 = 6.80 |
Adult-only case (tests/school_meal_net_subsidy.yaml:6-20) |
Age 49 gives is_in_k12_school false. Colorado universal meals and $0 income both give FREE. Daily subsidy 4.43 + 2.37 = 6.80. Net, free and reduced amounts are 0 because no child is enrolled. Matches the scenario the My Friend Ben assertions covered |
| Partner edge files | Only changes: the input-to-output move of is_in_k12_school (17 cases) and one case rename. No monetary expected value changed in round 3 |
edge/federal.yaml:624-626 comment |
Consistent with the new case name |
| Changelog | changelog.d/nc-reduced-price-school-meals.fixed.md is a top-level fragment named for the branch with type fixed. Unchanged since round 1; it still describes the PR |
| Formula and parameter values | Unchanged since round 2. No hard-coded values |
Maintainer decision (not counted in findings)
Axiom parity scope exception.
- The request:
- The PR body ends
axiom: n/a: Scope exception requested; maintainer approval is pending. - It explains that the PR corrects existing PEUS school-meal behavior and updates reimbursement rates.
- It says Axiom has no corresponding implemented school-meal program, citing the author's inventory.
- It notes that broader coverage is tracked in rulespec-us #1001 and axiom-encode #1517, and that the PEUS refactor is tracked in Complete school meal coverage: state policies, child-specific eligibility, and separate breakfast/lunch treatment #9789.
- The author's PR comment (Oct 5, 23:21 UTC) asks the reviewer to approve the exception. It acknowledges that the current guide covers policy bug fixes and that neither issue meets the
queuedrequirements.
- The PR body ends
- The rule:
- CONTRIBUTING.md#axiom-parity applies parity to "a new program, a parameter or threshold update, an eligibility rule and a bug fix".
- The shared guide lists infrastructure, data, UI, microsimulation-only and emulator-mapping changes as the
n/acases. - A scope exception is not one of the listed forms, so whether to accept it is a maintainer call.
- Facts for the decision:
- This PR adds a state rule (G.S. 115C-264(a1) and the earlier NC session laws).
- It adds the SY 2026-27 federal rates, re-dates the SY 2025-26 rates and corrects the SY 2025-26 contiguous paid lunch rate.
- rulespec-us Add IN exemptions #1001 (updated Jul 26) and axiom-encode
or_income_tax_after_refundable_credits->or_income_tax#1517 (updated Aug 23) are open and unlabelled. Neither is ape-parityissue with module paths, verbatim law and companion tests for these provisions. - Complete school meal coverage: state policies, child-specific eligibility, and separate breakfast/lunch treatment #9789 is open.
- Options:
- (a) Grant the exception and accept the line as written.
- (b) Require a dispatch-ready
pe-parityrulespec-us issue with Complete school meal coverage: state policies, child-specific eligibility, and separate breakfast/lunch treatment #9789 recorded as the blocker, and change the line toqueued.
- Approvability of the rest: everything else in the PR is ready to approve once S5 is fixed.
Partner Contract Tests
The round-3 diff touches 11 files under policyengine_us/tests/policy/baseline/partners/**. All were reviewed only; this review edited none of them.
| File | Change vs main |
Change in round 3 |
|---|---|---|
my_friend_ben/2025.yaml |
school_meal_daily_subsidy 7.06 → 6.80 (SY 2024-25 rates in force January 1, 2025), plus a comment. Model-driven |
The four added assertions and their comment were removed |
edge/ca.yaml, edge/co.yaml, edge/ma.yaml |
|
is_in_k12_school moved from input to output |
edge/federal.yaml |
|
is_in_k12_school moved to output in all 12 cases; one case renamed |
edge/nc.yaml (new) |
Three NC cases:
|
is_in_k12_school moved to output |
signatures/{co, il, ma, nc, tx}.yaml |
29 daily values 7.15 → 7.06. Tiers unchanged | None |
- Partner-facing effect:
- NC households in the reduced-price band move from REDUCED (6.36 daily, 993.60 net) to FREE (7.06, 1,119.60) in 2026.
- All 2025 and 2026 daily subsidy values change.
- No assertions were deleted against
main. Round 3 changed no monetary expected values.
- Team notification: the notice re-ran at the final head and lists all 11 files (Suggestion 6 above).
- API-partner notification: the PR body states "Team and API-partner notification have been confirmed by the author." No partner acknowledgment appears on the PR.
- CI:
Household API Partnerspasses atc6241a5e4b.
CI
gh pr checks 9756 at c6241a5e4b: 36/36 pass (run 37388221916, plus the partner notice). The passing checks include:
- Lint, changelog fragment and committed registry lock;
- Household API Partners;
- Full Suite Baseline ssa-usda, which runs the
gov/usdaschool-meal tests; - rest-a and rest-b;
- Rest (Python + variables).
Branch Status
- 14 commits ahead of and 34 behind
upstream/main(6440b3e604). Merge-base9bbdec7d51. - GitHub reports MERGEABLE. The merge state is BLOCKED only by the CHANGES_REQUESTED review.
git merge-treeagainst currentmainis clean. The only file both sides touch ispolicyengine_us/programs.yaml:mainedits the LIHEAP block, and this PR edits the school-meals block.- Since the merge-base,
mainadded three repository-wide guards that this branch's CI has not run:- Program registry test (Fix LIHEAP program registry entries and add a registry integrity test #9722): I parsed the merged
programs.yamlwith the test's own logic. The new NC entry (programs.yaml:115) has a valid state code,completestatus and a unique label. It has novariableorparameter_prefixfields, so the resolution tests do not apply to it. It passes. - Reference URL checks (Fix fused reference URLs repo-wide and correct Arkansas DFA page anchors #9609, List casetext.com in the known-dead reference URL guard #9768): every href in the PR is a single bare URL, and none is on a dead-URL list.
- Backdating invariants (Backdate parameters before applying reforms #9628): reforms still apply after uprating, so the new
at_defined_intervalprojection should not interact with them.
- Program registry test (Fix LIHEAP program registry entries and add a registry integrity test #9722): I parsed the merged
- A
mainmerge or a CI re-run before merging would confirm all three.
Review Severity
0 critical, 1 should address (S5, narrowed: split the two NC references by page and remove page lists from the titles), 1 optional suggestion. The axiom scope exception is a separate maintainer decision.
Fixed since round 2:
- the comma anchors (every href is now a single valid page);
- all six round-2 suggestions, with the projection test leaving one optional point (Suggestion 1);
- the partner notice re-run at the final head.
Remaining fix: S5. Replace the two combined NC references with one entry per page: #page=119 and #page=625; #page=5, #page=6 and #page=32.
Verdict (excluding the maintainer axiom decision): REQUEST_CHANGES
DTrim99
left a comment
There was a problem hiding this comment.
Round 3: all round-2 suggestions are addressed and the hrefs are now single valid pages. One should item remains (S5): the two combined NC references still carry page lists in their titles, so please split them into one entry per page (#page=119 and #page=625; #page=5, #page=6 and #page=32). The Axiom scope-exception request is a separate maintainer decision and is not counted here.
Split the two combined S.L. 2023-134 and S.L. 2025-89 references in state_covers_reduced_price_copay.yaml into one entry per cited page, so the effective-date and repeal sections link directly and no title carries a page list. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…into nc-reduced-price-school-meals
PR Review (round 4): Give North Carolina reduced-price school meal students the free tierHead: Summary: S5, the last open should-address item from round 3, is resolved. The only change to the PR's own scope is the reference split in Round-3 items
Axiom parity: the scope exception is not grantedThe PR body asks for an CONTRIBUTING.md#axiom-parity applies parity to bug fixes and parameter updates, and this PR is both. It changes North Carolina's reduced-price coverage and updates reimbursement rates. A scope exception is not one of the accepted forms. Axiom having no school-meal program yet is exactly the case the What's needed: replace the line with
The issue can link rulespec-us#1001, axiom-encode#1517 and #9789 as context or blockers. It does not need to wait for the broader school-meal program. CI statusCI is still queued on Branch statusThe branch is 1 commit behind Remaining fix: file the queued Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Round 4: S5 is resolved; all five split NC references open on their sections. The Axiom scope exception is not granted: this is a policy fix, so it needs a dispatch-ready pe-parity rulespec-us issue and an axiom: <issue> queued line (details in the comment above; the issue can name #9789 as a blocker). Everything else is ready to approve once that is in and CI is green.
Fixes #9755
What and why
North Carolina pays the reduced-price school meal copays, but the model assigned qualifying households the
REDUCEDtier. This PR assigns themFREE, updates published federal reimbursement rates through school year 2026–27, and aligns partner scenarios with the model's combined breakfast-and-lunch approach.state_covers_reduced_price_copayparameter and apply it when income is at or below the reduced-price limit of 185% of the poverty guideline. Add North Carolina to the program registry. Above-limit households remainPAIDunless another free-meal eligibility route applies.Sources and effective dates
North Carolina's combined copay parameter covers school year 2020–21 and school years beginning July 2022 onward. It is false for 2021–22 because the state provision covered breakfast only; this parameter requires both meals.
Model results and scope
The annual variables read January 1 rates. Calendar 2026 therefore uses school year 2025–26, and calendar 2027 uses school year 2026–27. The combined daily reimbursements are:
For two North Carolina parents and one enrolled eight-year-old with $50,542 of countable income in 2026, the copay provision changes the modeled annual benefit from
180 × ($6.36 − $0.84) = $993.60to180 × ($7.06 − $0.84) = $1,119.60, a $126 increase. This values one breakfast and one lunch per school day, net of paid-tier reimbursement; it does not estimate North Carolina's spending.Breakfast and lunch retain one household tier and one annual calculation. North Carolina is the only state enabled in the new copay parameter; this does not imply that other states lack coverage. Broader state coverage, separate meal eligibility, school participation, and historical federal waivers remain follow-up work in #9789.
Validation
make format: Ruff formatting and lint checks passed.axiom: TheAxiomFoundation/rulespec-us#1524 queued
The signed encoder is blocked because rulespec-us has no federal school-meal tier module to compose with; the issue records that blocker with #9789, carries the
pe-paritylabel, and holds the module paths, corpus citations, verbatim provisions, required outputs and companion tests derived from the session laws and USDA notices.