Repository navigation
Exclude SC TANF dependent children's earnings, deduct child support paid, and round to whole dollars - #10581
Exclude SC TANF dependent children's earnings, deduct child support paid, and round to whole dollars#10581MaxGhenis wants to merge 18 commits into
Conversation
…aid, and round to whole dollars TANF Policy Manual 7.5 excludes a dependent child's earned income from eligibility and the benefit, so it now leaves both income tests. 8.11 and 8.16 D/F deduct child support benefit group members pay outside the home after the 8.12 disregards, earned income first, never below zero, from the net test and the benefit only. 114-1140(A)(4) and the 8.15 table notes drop the cents of the need standard, the gross income limit and the payment, before the $10 minimum test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ble income A YAML test whose period is a month stores yearly inputs for the year that starts that month, so the May cases now use the 2026 period with May outputs. A January case separates the deduction from the 50% disregard. The property tests found countable income a float32 rounding error below zero when the deduction equals the group's income; floor it there, and leave groups with no deduction unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review Head: Rules and where they are
Expected values (hand-computed; head = this PR, run; main =
|
| Case | Hub | Mine | Head | Main |
|---|---|---|---|---|
| §8.15 need, sizes 1–8 | 652 … 2,256 | same | same (8 YAML cases) | 652.08 … 2,256.25 |
| §8.15 gross limit, sizes 1–8 | 1,206 … 4,173 | same | same (pass at the limit, fail one cent above) | unfloored |
| §8.15 payment standard, sizes 1–8 | 263 … 912 | same | same | unfloored |
| Size 9 need | 2,485 | 2,485 | 2,485 | 2,485.42 |
| Parent + 2 children, no income, 2026-01 | 449 | 449 | 449 | 449.27 |
| Child 16 earns $500/mo, 2026-01 | 449 | 449 | 449 | 348.12 |
| Parent earns $600/mo, pays $2,400/yr, 2026-05 | 327 | 327 | 327 (gross 600) | 246.97 |
| Two adults (A pays, B earns $600), 2026-05 | 327 | 327 | 327 | 246.97 |
| Support above income, 2026-05 | 449 | 449 | 449 (countable 0) | 348.12 |
| Same parent, 2026-01 (added: disregard before the deduction) | — | 408 | 408 (countable 100) | 327.89 |
| #10497 size 2, Jan 2025, countable 820 | 12 | 12 | 12 | 12.81 |
| #10497 size 2, Jan 2025, countable 826.80 | 0 | 0 | 0 | 10.06 |
I found no disagreement with the hub's values. Every existing fractional SC expectation was recomputed by hand, and each file shows its arithmetic.
Tests
All 15 SC TANF YAML files pass (128 cases); test_sc_tanf_unearned_income_invariants.py passes 2 and test_sc_tanf_child_earnings_support_invariants.py passes 4. The new property file takes 49 s locally with startup (11 s of tests) and uses no dataset. Invariants (a)–(f) are stated in the body and property-tested with Hypothesis on generated groups. The (f) differential checks main's formula, frozen as a reference function, on generated groups and on 200 seeded SC households in each of January and May. No partner file reads SC TANF; none touched. No microsimulation.
Mutants
1, 2, 3, 4, 5 and 7 are killed; the body's table lists which tests kill each. 6 survives because it's equivalent: ⌊x⌋ ≥ 10 exactly when x ≥ 10, so flooring before or after the $10 test can't change a payment. Mutant 2 as first written (capping the deduction by gross earnings) was too weak, so I reran it as "deduct support from gross earnings before the disregard"; Cases 21, 22, 23 and 25 kill it.
CI
Not run: the PR is a draft.
Judgment calls
- Negative earned income. The deduction is min(S, max(E + U, 0)), and countable income floors at zero only when a deduction applies. The brief's max(E − S, 0) + max(U − max(S − E, 0), 0) equals that whenever E ≥ 0. If a business loss makes E negative, main's countable income can already be negative. I left that unchanged, so (f) holds exactly, and the generated cases keep earned income nonnegative.
- Rounding bug the properties found. When the deduction equalled the group's income, countable income came out a float32 rounding error below zero. The zero floor above fixes it.
- May YAML cases use
period: 2026with May-keyed outputs. With a month period, the YAML runner stores yearly inputs for the year that starts that month, which May 2026 can't see. - Minor-parent mapping follows the brief: tax-unit head or spouse stands in for head of household. I found no better input.
- Body wording. The body's §7.5, 114-1140(A)(4) and §8.15 quotes are the brief's, not fetched here.
Draft comment for TheAxiomFoundation/rulespec-us#1728 (for the hub to post)
#10581 adds these South Carolina TANF provisions. Each needs a RuleSpec module under us-sc/:
- SC DSS TANF Policy Manual Vol. 67 §7.5 (PDF p.105): "Earned income of a dependent child(ren) is excluded". A minor parent's earnings count "if the minor parent is the head-of-household".
- §8.11 (p.131): child support paid outside the home by a benefit group member is deducted; a group with no income gets none (§8.11(2)).
- §8.16 B–G (p.134): the budget order. Dependent-child earnings are excluded (B); the §8.12 disregards come before the support deduction (D, F), and support comes off earned income first, then unearned.
- S.C. Code Regs. 114-1140(A)(4) (Chapter 114, p.210): the standard of need and the payment are "rounded down to the next lower whole dollar".
- §8.15 table notes (p.133): "multiply the Need Standard by 1.85 and drop the cents"; "multiply the Need Standard by .4046 and drop the cents".
Companion cases, computed by hand from those sources (2025 FPG, South Carolina):
- Benefit group of three, no income, January 2026: need ⌊26,650 / 12 × 0.5⌋ = 1,110; payment ⌊1,110 × 0.4046⌋ = $449.
- Same group, May 2026. The parent earns $600 a month and pays $2,400 a year in child support: E = 600 − 100 = 500, S = 200, countable 300, payment ⌊810 × 0.4046⌋ = $327. Gross income stays $600.
- Group of two, January 2025 (need ⌊851.67⌋ = 851), countable income $826.80: ⌊24.20 × 0.4046⌋ = $9, below the $10 minimum, so $0.
Proposed follow-up
- SC TANF: verify the dependent-child definition against Policy Manual Vol. 67. This PR maps it to the federal TANF minor-child ages and the tax-unit head or spouse. Check the manual's own age, school-attendance and minor-parent wording, and §8.10 A.2 deeming to minor parents.
Generated by Claude Code
S.C. Code Regs. 114-1140(A)(2) and (A)(4) set the need standard at fifty percent of the poverty guideline, rounded down; the Policy Manual section 8.15 note adds $229 for each person above eight. The two differ by $1 from 13 persons. The model follows the regulation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #10581 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 1 7 +6
Lines 37 118 +81
Branches 0 1 +1
=========================================
+ Hits 37 118 +81
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:
|
|
Ready for hub review Independent review of the whole diff at METHODOLOGY_CHOICE is yes because the PR picks readings where the sources leave room: the tax-unit head or spouse stands in for "head-of-household", one adult's support comes off the whole group's income, and the regulation governs over the manual above eight persons. FindingsP1. A minor parent who lives with no adult is treated as a dependent child, so her earnings drop out
The mapping relies on
Witness, January 2026, mother 17 with $6,000 a year of wages and a baby, no role inputs: By hand: $500 a month of wages, a 50% January disregard leaves 250, and floor((881 − 250) × 0.4046 = 255.30) = $255. The head pays $356, the full payment standard for two. Main pays $255.40, which is right apart from rounding. Fix. I tested this replacement for lines 33-34 in a scratch tree. It gives head_or_spouse = person("is_tax_unit_head_or_spouse", year)
# Tax-unit roles are inferred only for adults, so a minor parent who
# lives with no adult heads no tax unit unless roles are input. The
# oldest member of a group with no adult heads the household.
no_adult = ~person.spm_unit.any(~person("is_child", year))
oldest = person.get_rank(person.spm_unit, -age) == 0
heads_household = head_or_spouse | (no_adult & oldest)
return meets_age_test & ~heads_householdAdd a case to P2. A married minor whose spouse is an adult is a dependent child unless roles are input, which contradicts a claim in the body and in the hub's mapping ruling
The body says: "A married minor is almost always the head or spouse of their own tax unit, which the mapping already treats as a parent." With inferred roles that isn't true. Witness, January 2026, spouse 20, wife 17 with $6,000 a year of wages, baby: Section 4.10 requires a dependent child to be "unmarried", as the body quotes it, so her wages should count: floor((1,110 − 250) × 0.4046 = 347.96) = $347. I tried reading marriage from
Whether the default microdata supplies P2. The body's status lines are false at this headPR body, "Status" line and the last sentence of "Tests". The body says "Status: draft … CI has not run (drafts skip it)" and "CI has not run, because this is a draft." The API reports P3. The hub's population expectation that "the floors lower each payment by under $1" is wrong at two marginsThis isn't a code defect. It matters for reading the impact pair.
So expect a few households to lose their whole benefit at the gross limit, and most to lose up to about $1.40. The body makes no claim about the size of the loss, so the body needs no edit. P3. Mutant 2 is killed only in January; Cases 21 and 22 can't distinguish the orderPR body, mutant table, row 2. A $100 flat disregard commutes with subtracting the support whenever earnings exceed S + 100, so the May cases give the same countable income in either order. I wrote mutant 2 as "subtract S from gross earnings, then apply the §8.12 disregard". P3. Body table: main's January value for Case 25 is 327.89, not 327.90PR body, Expected values, row "Parent earns $600/mo and pays $2,400/yr, 2026-01". Main gives P3. Invariant wording: (b) and (f) say more than the tests check
P3.
|
| # | Mutant | Result | Killed by |
|---|---|---|---|
| 1 | Drop the dependent-child exclusion | killed | integration Cases 19, 20; dependent_child Case 4; test_invariants (c) |
| 2 | Subtract S from gross earnings, then apply the disregard | killed | integration Cases 23, 25 only (see P3) |
| 3 | Child support reduces sc_tanf_gross_income |
killed | integration Cases 21, 23, 25; test_invariants (e) |
| 4 | Deduction capped at each payer's own countable earnings | killed | integration Cases 22, 23 |
| 5 | No need-standard floor | killed | need_standard 11 of 12; integration 6; gross_income_eligible 8; sc_tanf 1; countable_income_eligible 1 |
| 6 | $10 test on the unfloored benefit, floor after | survived, equivalent | none, as expected: the threshold is an integer |
| 7 | (age test & ~head_or_spouse) | is_pregnant |
killed | dependent_child Case 3; integration Case 24; both (f) differentials |
| 8 (mine) | Drop ~head_or_spouse |
killed | dependent_child Case 2 only |
Mutant 8 is caught by a single case, and that case inputs the head role explicitly. That gap is P1.
The P1 fix above, applied in a scratch tree, passes sc_tanf_dependent_child.yaml (4), integration.yaml (25) and the property file (4).
What I couldn't check
-
Sources. dss.sc.gov and scstatehouse.gov are outside this session's network allowlist. Both a proxy fetch and a direct fetch failed, so I didn't try other hosts. I couldn't read §4.10, §7.5, §8.11, §8.15, §8.16 or 114-1140 myself. Every quotation above is the body's or the hub's, and none is confirmed. The rule logic is checked against those quotations only.
-
rulespec-us#1728. That repository is outside this session's GitHub scope, so I couldn't check its seven companion rows against this head's YAML, or whether the issue is labelled
pe-parityand dispatch-ready asqueuedrequires. The body's line readsaxiom: TheAxiomFoundation/rulespec-us#1728 queued. -
Microdata. I couldn't check whether the default dataset supplies
tax_unit_role_inputfor minors, which decides how far P1 and P2 reach in microsimulation. I also couldn't check how oftenchild_support_expenseis nonzero for SC TANF units. -
Population. I ran no microsimulation. For the impact pair at the landing head, beyond
sc_tanfand the common set, the hub needs:sc_tanf_dependent_childsc_tanf_gross_earned_incomesc_tanf_gross_incomesc_tanf_child_support_deductionsc_tanf_countable_incomesc_tanf_need_standardsc_tanf_gross_income_eligiblesc_tanf_countable_income_eligiblesc_tanf_eligiblechild_support_expense(input coverage)tanf,spm_unit_benefitsand the SPM poverty flags
Expected directions: the child-earnings exclusion and the support deduction raise payments and add eligible units. The floors lower most payments by up to about $1.40, and the gross-limit floor drops a few units at the limit (P3).
-
CI. I looked at CI only at this head.
Generated by Claude Code
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
Bring the branch up to date with main (25 commits since 97b6d51) before the round 2 fixes. source_conflicts/candidates.yaml changed on both sides and merged without conflict; its ids stay sorted and unique. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Section 7.5 counts a minor parent's earned income if the minor parent is the head of household. PE-US infers tax-unit roles only for adults, so a 17-year-old living alone with her baby headed no tax unit unless roles were input, and her wages were excluded as a dependent child's: $356 instead of $255. In a group with no adult nobody else can head the household, so the oldest member does, mirroring is_tax_unit_head. With an adult in the group, the tax unit's head or spouse still heads it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A minor married to an adult counts as a parent only when the household input names them the tax unit's head or spouse, because roles are inferred only for adults. This case pins that path: her $500 a month counts, and the group of three receives $347. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The reference kept Volume 65 page 131 beside Volume 67. The payment's rules are the Section 8.15 table notes (page 133), which drop the cents of the payment standard, and Section 8.16 I (page 134), the $10 minimum, with S.C. Code Regs. 114-1140(A)(4). One entry per source document. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Picking this up for the US hub. I continue an earlier session's round 2 work on this PR (its four commits, Generated by Claude Code |
Bring the branch up to date with main before the round 2 hand-off. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review Round 2 fix round, following the round 1 review (#10581 (comment)). This session continued an earlier session's work. That session pushed four commits ( The earlier session's commits
Merge of main
A setup note: the clone came shallow. My first merge attempt saw Hand values (new cases)
Findings 1–8
MutantsEach ran in its own process at
No property test kills (b), (c) or (d), because every generated group has an adult head. Tests at
|
|
Hub review in progress Round 2 review at Firm so far:
Mutant case names and the fix check are still running. Generated by Claude Code |
|
Ready for hub review Independent round 2 review. The head hasn't moved past METHODOLOGY_CHOICE stays yes. The PR keeps round 1's readings: tax-unit head or spouse stands in for "head-of-household", one member's support comes off the whole group's income, and the regulation governs above eight persons. It adds the hub's reading that the oldest member heads a group with no adult. Every round 1 finding is fixed at this head. One new defect is left in the no-adult clause: when the oldest members tie in age, the result depends on the order the members are listed. FindingsP2. When the oldest members of a group with no adult tie in age, the result depends on input order
Witness, 2026-01, no role inputs: twins aged 17, one earning $6,000 a year, and a baby aged 0. By hand: size 3 need ⌊(15,650 + 2 × 5,500) / 12 × 0.5 = 1,110.42⌋ = 1,110. Her $500 less the 50% January disregard leaves 250, so the payment is ⌊(1,110 − 250) × 0.4046 = 347.96⌋ = 347. With her wages dropped it's ⌊1,110 × 0.4046 = 449.11⌋ = 449. Fix. Every member who ties for oldest heads the household. Two members of the same age can't be each other's parent, so neither should be the other's dependent child. Replace lines 36-41 with: # Tax-unit roles are inferred only for adults, so a minor parent who
# lives with no adult heads no tax unit unless roles are input. The
# oldest member of a group with no adult heads the household; members
# who tie for oldest all head it, so the result doesn't depend on the
# order in which members are listed.
no_adult = ~person.spm_unit.any(~person("is_child", year))
oldest = age == person.spm_unit.max(age)
heads_household = head_or_spouse | (no_adult & oldest)I applied that change in place and restored it afterwards ( Add a case to Then update the variable's Reach: household calculations only, as with round 1's P1. The hub reports that the default dataset supplies every person's tax-unit role and that every member of its no-adult SPM units is a tax-unit head, so P3. The body's CI sentence is stalePR body, "Tests", last paragraph. It says run 41714176878 "was still in progress 65 minutes after the push", with Contrib other-shard-3 still running. The run has since finished: P3. The body's #10616 overlap bullet describes an older headPR body, "Overlap". #10616's head is now Checked and sound
My first version of (a) failed all four properties too. That was my bug: an unprojected SPM-level sum broke multi-unit simulations. The corrected version gives the result above, which matches the body's row 2. Rows 8-10 of the body's table match (b)-(d) exactly. No property test kills (b)-(e), because every generated group has an adult head. I don't think a generator for groups with no adult is worth adding. YAML Cases 2, 5, 26 and 27 already kill every mutant of the clause, and the tie case above pins the remaining gap more cheaply than a Hypothesis strategy that builds simulations.
What I couldn't check
Generated by Claude Code |
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
get_rank picked one of two equally old members as head, so the result depended on input order: twins aged 17, one earning, gave sc_tanf 449 with the non-earner listed first and 347 with the earner first. Every member whose age equals the group's maximum now heads the household, giving 347 in both orders. Adds the tie household in both orders to sc_tanf_dependent_child.yaml and integration.yaml. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6H5RwtLwccqSeGpYbx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review Round 2 review: one P2 and two P3s, all addressed. Nobody else committed to the branch while I worked. It was at 1. Pick-up and merge
2. P2: members who tie for oldest all head the household
At the head, all four new cases fail (2 of 7 in
3. Body (read back after the PATCH, matches the file I sent)
4. Runs (one file per process, after the merge)
Judgment calls
Not checked
No follow-up issue proposed. Generated by Claude Code |
|
Hub review in progress Round 3 review at So far:
Still running: the test files and mutants. Generated by Claude Code |
|
Ready for hub review Independent round 3 review. The head hasn't moved past
METHODOLOGY_CHOICE stays yes for the readings round 2 listed: tax-unit head or spouse for "head-of-household", one member's support off the whole group's income, and the regulation above eight persons. Add the hub's no-adult rule, which now makes members who tie for oldest all head the group. The round 2 P2 is fixed, and the code is correct in every tie I tried. What's left is three stale statements in the body and one test gap. None needs a code change. FindingsP3. The body's CI sentence is stale againPR body, "Tests", last paragraph. It says run 41834176912 "was still in progress 60 minutes after the push", with 34 of 36 jobs passed. The run has since finished. It's the only run at this head. Replace the sentence with: "CI: Pull request run 41834176912 at P3. The body's Tests section and mutant table describe round 2's headPR body, "Tests" and "Mutants".
Replace:
P3. The #10532 overlap bullet is false since the main mergePR body, "Overlap": "#10532. It merges cleanly with this PR." #10532 ( Replace the bullet with: "#10532. It conflicts with main in The #10527 bullet's file list is short too. It now also conflicts in P3. No test pins "oldest" against a younger minor near the oldest's age
Add this case to - name: Case 8, a younger minor in a group with no adult is a dependent child.
period: 2026-01
input:
people:
sibling:
age: 17
minor_parent:
age: 16
employment_income_before_lsr: 6_000
baby:
age: 0
households:
household:
members: [sibling, minor_parent, baby]
state_code: SC
output:
# No tax-unit role is input. The 17-year-old is the oldest member of a
# group with no adult, so she alone heads the household; the 16-year-old
# is a dependent child and Section 7.5 excludes her earnings.
sc_tanf_dependent_child: [false, true, true]
sc_tanf_gross_earned_income: [0, 0, 0]
sc_tanf_countable_income: 0
# floor(1,110 x 0.4046 = 449.11) = 449.
sc_tanf: 449I ran that case as a separate file. It passes at this head (1 passed). Under (h) it fails: Checked and sound
Rows (b)-(e) and (g) match the hand-off's table exactly.
What I couldn't check
Generated by Claude Code |
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
…child The round 3 review's mutant (h), which makes every member within a year of the oldest a head, survived both YAML files because each no-adult case paired 17-year-olds with a baby. Case 8 (sc_tanf_dependent_child.yaml) and Case 30 (integration.yaml) add a 17-year-old sibling, an earning 16-year-old and a baby, which kills it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6FqQp8Bf92tRiedzTm
|
Ready for hub review Head: One commit on top of What the round 3 review asked for, and what I did
Tests at
|
| # | Mutant | Killed by |
|---|---|---|
| 8 | heads_household = head_or_spouse |
dependent_child 5, 6, 7, 8; integration 26, 28, 29, 30 |
| 9 | oldest = True |
dependent_child 2, 5, 6, 7, 8; integration 26, 28, 29, 30 |
| 10 | return meets_age_test |
dependent_child 2, 5, 6, 7, 8; integration 26–30 |
| 11 | oldest = person.get_rank(person.spm_unit, -age) == 0 |
dependent_child 6, 7; integration 28, 29 |
| 12 | oldest = age >= person.spm_unit.max(age) - 1 |
dependent_child 8; integration 30 |
The other five YAML files passed under every mutant, and the property file passed 4 every time. None survives.
Overlap (git merge-tree --write-tree --name-only)
- Include farm and partnership earnings in SSI and correct loss netting #10532 (
4cab6b38ae): it conflicts inca_state_supplement.yamlagainstorigin/main, against this head, and against25c4253483, the main this PR merged. This PR's diff against main doesn't touch that file. Main's new Compute the California state supplement per person #10601 also edits the file, so the conflict hunks against current main differ from those against this head. The file list is the same. - Apply the Maryland and Maine EITC waivers of the 32(m) SSN requirement #10527 (
5a92f6cc0c, draft): against both main and this head it conflicts inMakefile,me_eitc.py,nj_eitc.py,nj_eitc.yamlandcandidates.yaml. The conflict text is identical once the marker labels are normalized. The onlycandidates.yamlhunk is theus-me:one. This PR'sus-sc:tanf-need-standard-above-eightmerges cleanly. - Add South Carolina LIHEAP regular heating assistance #10616 (
85d8103fbd): clean against main, and against this head it conflicts incandidates.yamlonly.
CI
Pull request run 41945984219 at 39ddd68887 hadn't finished 60 minutes after the 01:04Z push. At 02:06Z, 34 of 36 jobs had concluded success. Contrib tests / Full Suite - Contrib (other-shard-1) and (other-shard-3), both started at 01:37Z, were still running. None had failed or been cancelled.
The body's CI sentence still describes run 41834176912 at c671a313e3 as in progress, so it is stale. Item 8 applies once a run finishes, and this one hadn't, so I left that sentence for the hub. When the run passes, it should read: "Pull request run 41945984219 passed all 36 jobs at 39ddd68887."
Judgment calls
- The brief didn't name Case 30, so I gave it Case 8's name with the number changed.
- I didn't apply the review's CI-sentence P3, because the run at this head hadn't finished when I handed off (see CI).
- I edited two more mutants-paragraph sentences, which would otherwise have named only
71e1d42269and rows 8–10 (see item 2). - No primary source was fetched this round; the change quotes nothing new.
Generated by Claude Code
|
Hub review in progress Round 4 delta review at So far:
Still to do: mutants 8-12 plus one of my own, the overlap merge-trees, main, readers and the body. Generated by Claude Code |
|
Ready for hub review Independent round 4 delta review. The head hasn't moved past METHODOLOGY_CHOICE stays yes for the readings earlier rounds listed: tax-unit head or spouse for "head-of-household", the oldest member heading a group with no adult (with ties all heading), one member's support coming off the whole group's income, and the regulation above eight persons. P3-1 names one more case of the oldest-member reading that the hub hasn't ruled on explicitly. FindingsP3-1. No test pins how the oldest-member rule combines with input roles
Witness, 2026-01, roles input. A 16-year-old minor parent is input as tax-unit head. Her 17-year-old sibling earns $6,000 a year and is input as her tax dependent, and her baby is too. All three are in one SPM unit in SC. Hand values: size 3 need is ⌊26,650 / 12 × 0.5 = 1,110.42⌋ = 1,110. With the sibling heading, ⌊(1,110 − 250) × 0.4046 = 347.96⌋ = 347. With the sibling a dependent child, ⌊1,110 × 0.4046 = 449.11⌋ = 449. The case is reachable in the microsimulation. The body says the default dataset supplies every role, so in any SPM unit with no adult whose oldest member isn't a tax-unit head or spouse, this clause adds the oldest as a second head. Two readings are possible: "the oldest heads only when no member holds a head role" (m2), or "both head" (the head). The sources I could read don't settle it (see "What I couldn't check"). Ask the hub to rule, then pin the ruling. If the hub keeps the head's reading, append this to - name: Case 9, in a group with no adult the oldest member heads it even when a younger member is input as the tax unit head.
period: 2026-01
input:
people:
minor_parent:
age: 16
is_tax_unit_head: true
sibling:
age: 17
is_tax_unit_dependent: true
employment_income_before_lsr: 6_000
baby:
age: 0
is_tax_unit_dependent: true
tax_units:
tax_unit:
members: [minor_parent, sibling, baby]
spm_units:
spm_unit:
members: [minor_parent, sibling, baby]
households:
household:
members: [minor_parent, sibling, baby]
state_code: SC
output:
# The 16-year-old heads as the tax unit head, and the 17-year-old heads
# as the oldest member of a group with no adult, so his earnings count.
sc_tanf_dependent_child: [false, false, true]
sc_tanf_gross_earned_income: [0, 500, 0]
# 6,000 / 12 = 500 a month, less the 50% January disregard: 250.
sc_tanf_countable_income: 250
# floor((1,110 - 250) x 0.4046 = 347.96) = 347.
sc_tanf: 347If the hub picks the m2 reading instead, change line 41 to the m2 line, and change the case's expected values to P3-2. The body suggests the no-adult rule doesn't act on the microsimulationPR body, "Rules", item 1, last sentence of the Mapping paragraph: "The default dataset supplies every person's tax-unit role, so these limits apply to household calculations, not the microsimulation." That holds for the role-inference limits. But the sentence just before it states the no-adult oldest-member rule, and a reader measuring impact would take that rule to be household-only too. It isn't: the P3-1 witness gives a household with supplied roles where the rule changes the payment (347 vs 449). I can't see the dataset, so I can't say how many SPM units it reaches. Replace the sentence with:
Checked and sound
Rows 8–12 match the body's "Killed by" cells exactly. The body's sentence "The property tests killed none of row 2 or rows 8–12" holds for rows 8–12. Row 12's failure message is
What I couldn't check
Generated by Claude Code |
In a group with no adult, the oldest member heads it even when a younger member holds the tax unit head role, so both count as heads and the oldest's earnings count. Add the case to sc_tanf_dependent_child.yaml and integration.yaml: a 16-year-old input as head, a 17-year-old sibling who earns $6,000 and a baby give a $347 payment, against $449 if the sibling counted as a dependent child. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Exclude SC TANF dependent children's earnings, deduct child support paid, and round to whole dollarsSummaryThis PR adds three South Carolina Family Independence (TANF) rules that main lacks. Main's SC TANF code hasn't changed since this branch's merge base: #9687 and #10184 are already in that base. The rules are: (1) dependent children's earned income is excluded; (2) child support paid outside the home is deducted after the earned income disregards; (3) the need standard, gross income limit and payment are rounded down to whole dollars. I read the governing regulations (S.C. Code Regs. 114-1130, 114-1140 and 114-1150, Chapter 114 PDF) and TANF Policy Manual Vol. 67 (sha256
CI is green (38/38). The branch now conflicts with main in Critical (must fix)C1. The child support deduction comes off the whole group's income; 114-1140(L) takes it only from the payer's income. S.C. Code Regs. 114-1140(L) (Chapter 114, p.212):
114-1130(B)(3) (p.203) treats a stepparent the same way: "The stepparent's income may be reduced by any child support paid to legal dependents outside the home." The manual can be read the same way.
The PR body reads "any adult" in D and F, and §8.11's "deducted as income to the BG", as pooling. Even on that reading, CONTRIBUTING.md#source-conflicts ("Regulations are law"; "Statute first") makes the regulation govern over the manual. The body's own alternative ("payer-only reading: 246") is the regulation's result. Witness: Case 22, May 2026. Adult A pays $2,400 a year and has no income. Adult B earns $600 a month, and there is one child.
Fix:
C2. In a group with no adult, the oldest member heads the household even when the inputs make him another member's dependent, so a dependent child's wages count. In Case 9 the 16-year-old is input as tax-unit head. The 17-year-old earner is input as her dependent ( The law leaves no room for that:
So the 17-year-old is either a dependent child in the group or outside it, and either way his wages don't count. The oldest-member rule stands in for missing roles; the code comment says it exists because "roles are inferred only for adults". Here the roles are input, and the rule overrides them.
Fix: apply the age rule only when no member holds a head or spouse role. This is the body's mutant 13. no_head = ~person.spm_unit.any(head_or_spouse)
heads_household = head_or_spouse | (no_adult & no_head & oldest)
Should addressS1. The gross income limit floor follows the manual over 114-1150(A), and the choice isn't recorded. 114-1150(A) (p.217): "Gross monthly countable earned and unearned income of the Family Independence benefit group must not exceed 185 percent of the need standard by family size." 114-1140(A)(4) (p.210) rounds only "the standard of need or the payment amount". The body's rule 3 cites (A)(4) for all three floors, but the gross-limit floor rests only on the §8.15 note "multiply the Need Standard by 1.85 and drop the cents". §8.1 (p.121) also says "Do not round at any step of the TANF calculation." Witness: a parent and child in January 2026, with wages of $19,554 a year ($1,629.50 a month).
Above eight persons, the PR already follows the regulation over a manual note (
S2. Two new payer conditions are unpinned (mutation rule). Only integration Cases 21–23 and 25 set Fix: after reworking C1, decide each condition and pin it.
Optional: the Suggestions
Verified correct
Hand checks (2024 guideline 15,060 + 5,380; 2025 guideline 15,650 + 5,500; 2019 guideline 12,490 + 4,420; 2023 guideline 14,580 + 5,140):
Each case computes as the code intends. Case 22 (327) and Cases 9 and 31 (347) are arithmetically right but legally wrong (C1, C2). The §8.15 gross-limit boundary cases depend on S1. Axiom line assessmentThe line is Its 2026-11-02 extension comment for this PR (written at
All of those values match the head, so the line is valid at this head. One gap: the "Readings" bullet doesn't describe the no-adult oldest-member rule, but the extension says an encoding can take head of household as an input, so that doesn't block it. Once C1, C2 and S1 are fixed, the issue must follow:
Also reconcile the issue body's need-standard output and its companion test 11 ("it does not yet drop cents", $851.67) with the extension's floored $851. CI status
Branch status
Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes: 2 critical ((1) the child support deduction comes off the whole group's income, but 114-1140(L) takes it only from the payer's income: Case 22 should pay $246, not $327; (2) in a group with no adult, the oldest-member rule overrides input roles, so a dependent 17-year-old's wages count against 114-1140(N)(1): Case 9 should pay $449, not $347), 2 should (the gross-limit floor follows the manual over 114-1150(A), unrecorded; two payer conditions unpinned). Full report in the comment above.
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
S.C. Code Regs. 114-1140(L) says support a budget group member pays outside the group "may be deducted from the income of the payor". The deduction pooled the group's income instead, so one adult's support came off another adult's earnings. Compute each payer's deduction from that payer's countable earned and unearned income, and sum it. Drop the SSI and dependent-child payer conditions: an SSI recipient's counted income is already zero, and the regulation covers any budget group member, a dependent child included. Floor countable income at the sum of the members' negative incomes instead of zero. With a per-payer deduction, a zero floor would raise countable income when another member has a self-employment loss. Cite Section 8.1 for keeping countable income's cents. Case 22 now pays 246, not 327. New Cases 32 to 36 pin an SSI payer, a dependent-child payer, a negative support input, and a self-employment loss with and without a payer. Record the conflict as us-sc:tanf-child-support-deduction-payer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In a group with no adult, the oldest member headed the household even when the inputs made a younger member the tax unit head and the oldest member a tax dependent. That counted a dependent child's wages, which S.C. Code Regs. 114-1140(N)(1) excludes. Apply the rule only when no member holds a head or spouse role. Cases 9 and 31 now expect the 17-year-old to be a dependent child, countable income of 0 and a payment of 449. Groups with no role inputs don't move. Cite 114-1130(E) for the age test and 114-1140(N)(1) for the exclusion. Give Cases 8 and 30's members neutral names, and say that those cases pin the inference rule, since no input says which minor is the parent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
S.C. Code Regs. 114-1150(A) sets the limit at 185 percent of the need standard, and 114-1140(A)(4) rounds down only the standard of need and the payment. Flooring the limit, as the Section 8.15 note does, failed groups up to a dollar below the regulation's limit. Drop the floor, and move the boundary cases to one cent on each side of the exact limit. Record the conflict as us-sc:tanf-gross-income-limit-cents. Bring the property test's sources, the stale need and limit comments and the changelog line up to this round's rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A parent and child with 1,629.50 a month of wages in January 2026 pass 114-1150(A)'s limit of 1,629.85 and receive 26. The whole-dollar limit would fail them and pay nothing. Case 37 pins that end to end. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When a payer's support exceeds the payer's own income, the stored float32 deduction can exceed the float64 income sum by about 3e-5. The floor in sc_tanf_countable_income absorbs that, but only random draws reached it. A fixed January example with $9,005 of wages, $2,298 of alimony and $9,000 of support now fails property (b) without the floor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review Head: I picked the PR up at
Findings reproduced before any changeAt
I fetched both sources and read the cited pages: S.C. Code Regs. Chapter 114 (July 2025 compilation) pp. 203–204, 210, 212–213 and 217, and Manual Vol. 67 (sha256 Items
Tests at the final headOne process per file, never more than four at a time:
MutantsEvery row ran this round in a scratch worktree. Rows 1–12 are earlier rounds' mutants, rerun at the final head
The property tests killed rows 1, 3, 7 and 20 only. Every generated group has an adult head, only adults pay support, and no member has a loss. Row 13 was the body's mutant 13 before this round: the code now takes that reading, so the reverse mutant is the check. The property tests found one real bug in round 1: countable income came out a float32 rounding error below zero when a deduction used up a payer's income. The stored float32 deduction can exceed the float64 income sum by about 3e-5. CIPull request run 42641205118 is the only run at Judgment calls
Draft refreshed extension for TheAxiomFoundation/rulespec-us#1728 (for the hub to post)
Proposed follow-up issues
Generated by Claude Code |
Models three South Carolina TANF rules that #10184 left out. Fixes the South Carolina part of #10497; Michigan FIP's half stays open there.
Rules
1. Dependent children's earned income is excluded (S.C. Code Regs. 114-1140(N)(1); TANF Policy Manual Vol. 67 §7.5, PDF p.105; §8.16 B, p.134). 114-1140(N)(1) excludes "the earned income of dependent children" in "the FI gross income limit test and the need and benefit determination". §7.5's first row says "Earned income of a dependent child(ren) is excluded". A minor parent's earnings count "if the minor parent is the head-of-household" and are excluded "if the minor parent is included as a dependent in the TANF BG". The exclusion sits in
sc_tanf_gross_earned_income, so the gross test, the net test and the benefit all see it. That variable's only readers aresc_tanf_gross_incomeandsc_tanf_countable_earned_income_person, and neither needs the child's earnings. A dependent child's unearned income still counts.Mapping (new
sc_tanf_dependent_child). 114-1130(E) (p.204) sets the age test: a dependent child "must be under eighteen years of age or under nineteen years of age and a full-time student in a secondary school". The model reusesgov.hhs.tanf.cash.eligibility.age_limit: under 18, or under 19 whenis_in_secondary_school. A person who meets it and is the head or spouse of their tax unit (is_tax_unit_head_or_spouse) is treated as a head-of-household minor parent, so their earnings count; everyone else who meets it is a dependent child, apart from the no-adult rule below. Pregnancy plays no part:is_person_demographic_tanf_eligiblealso returns true for any pregnant person, which would wrongly exclude a pregnant adult's wages. Policy Manual §4.10 (p.75) extends the age to a full-time student "in a primary or secondary school or equivalent", who "may receive benefits until age 19". The model follows the regulation's "secondary school", so it treats an 18-year-old in primary school as a non-student. It doesn't test "unmarried" (§4.10). An 18-year-old in secondary school meets the age test but is an adult for role inference, so with no dependent input one who lives with a single parent is inferred to be the tax unit's spouse, and their earnings count.In a group with an adult, a minor, married or not, counts as a parent only when the household input names them the tax unit's head or spouse, because PE-US infers tax-unit roles only for adults. In a group with no adult where no member holds a head or spouse role, the oldest member heads the household, and members who tie for oldest all head it. Where a member does hold one of those roles, the inputs decide. A 17-year-old input as a younger head's tax dependent is a dependent child, and 114-1140(N)(1) excludes that 17-year-old's earnings (
sc_tanf_dependent_child.yamlCase 9,integration.yamlCase 31). The default dataset supplies every person's tax-unit role, and all 29 people in its 28 SPM units with no adult hold the head role, so these limits change household calculations and not the microsimulation.2. Child support paid outside the group comes off the payer's own income (S.C. Code Regs. 114-1140(L); §8.11, p.131; §8.16 D and F, p.134). 114-1140(L) says support "made by a budget group member to legal dependents who are not budget group members may be deducted from the income of the payor". 114-1130(B)(3) reduces a stepparent's own income the same way. New
sc_tanf_child_support_deductiontakes each member'schild_support_expense, read monthly, from that member's own income: earned income after the §8.12 disregards, then unearned income, in the order of §8.16 C, D and F, never below zero. It sums those amounts over the group.integration.yamlCase 33).sc_tanf_countable_incomesubtracts the deduction, which serves the §8.16 H net test and the benefit.sc_tanf_gross_incomedoesn't read it, so the gross test stays on gross income.Countable income keeps its cents; §8.1 (p.121) says "Do not round at any step of the TANF calculation". As on main, a self-employment loss in a month of the 50% disregard can take countable income below zero (Case 35). The deduction never takes a payer's own income below zero, so another member's loss doesn't cancel a payer's deduction (Case 36). The manual reads as pooling: §8.16 D subtracts support "from the remaining earned income of any adult", F takes support "paid by any adult" from the unearned income, and §8.11 deducts it "as income to the BG". The regulation governs, and
source_conflicts/candidates.yamlrecords the difference asus-sc:tanf-child-support-deduction-payer.3. Whole dollars (S.C. Code Regs. 114-1140(A)(4); §8.15 table notes, p.133). 114-1140(A)(4) rounds the benefit "down to the next lower whole dollar" when "the standard of need or the payment amount is not a whole dollar". The table notes say "multiply the Need Standard by .4046 and drop the cents" for the payment standard. The changes:
The table rounds the monthly FPG before halving it ($1,762 → $881 for two). ⌊⌊x⌋/2⌋ = ⌊x/2⌋ for x ≥ 0, so flooring once gives the same result. Countable income keeps its cents.
The gross income limit keeps its cents too. 114-1150(A) (p.217) says gross income "must not exceed 185 percent of the need standard by family size", and 114-1140(A)(4) rounds only the need standard and the payment. The §8.15 note says "multiply the Need Standard by 1.85 and drop the cents", which fails groups up to a dollar below the regulation's limit. The model follows the regulation, so the limit is 1.85 times the floored need standard: $1,629.85 for two in 2026, where the table prints $1,629.
source_conflicts/candidates.yamlrecords the difference asus-sc:tanf-gross-income-limit-cents.Above eight persons, the §8.15 note adds $229 for each person, while 114-1140(A)(2) sets the standard at "fifty percent of the current year's" poverty guidelines. The two agree through 12 persons and differ from 13: $3,402 under the regulation and $3,401 under the note for 13 persons in 2026. The model follows the regulation, and
source_conflicts/candidates.yamlrecords the difference asus-sc:tanf-need-standard-above-eight.Out of scope. §8.10 A.2 (p.131) subtracts child support paid when a parent's income is deemed to a minor parent. The model doesn't deem income to minor parents, so that rule is left as is. Michigan FIP's rounding is the other half of #10497.
Expected values
2025 FPG ($15,650 + $5,500 per added person), except the two #10497 rows, which use the 2024 guideline ($15,060 + $5,380) in effect in January 2025. Every household is in South Carolina.
All values were computed by hand, and each YAML case shows its arithmetic. Every fractional expectation already in the SC files was recomputed the same way (
sc_tanf.yaml,integration.yaml,sc_tanf_need_standard.yaml,sc_tanf_gross_income_eligible.yaml,sc_tanf_countable_income_eligible.yaml, and the need standard intest_sc_tanf_unearned_income_invariants.py). The main column of each row that names a case comes from a run atorigin/mainba9bfdea75; the other rows' main values come from earlier rounds' runs.Invariants (Hypothesis,
test_sc_tanf_child_earnings_support_invariants.py)For every generated South Carolina benefit group:
sc_tanfis a whole number of dollars, and is 0 or at least $10.sc_tanf_gross_income,sc_tanf_countable_incomeorsc_tanf.sc_tanfnever rises when an adult's wages rise.sc_tanf_gross_income.sc_tanf_countable_incomeequals main's formula to the cent. The test freezes that formula as a reference function and checks it on generated groups and on 200 seeded South Carolina households in each of January and May.Generated groups have no self-employment income, nobody receives SSI, and only adults pay support, so earned income is never negative. Every generated group has an adult head, so YAML cases alone pin the no-adult rule, a dependent child's or SSI recipient's support (Cases 32 and 33), and a self-employment loss (Cases 35 and 36).
Mutants (one process per test file, source restored after each)
Every row ran this round in a scratch worktree. Rows 1–12 are earlier rounds' mutants, rerun at the final head
e4e6861e6aagainstintegration.yaml,sc_tanf_dependent_child.yaml,sc_tanf.yaml,sc_tanf_need_standard.yaml,sc_tanf_gross_income_eligible.yaml,sc_tanf_countable_income_eligible.yaml,sc_tanf_gross_earned_income.yamland the property file. Rows 2 and 4 are rewritten for the per-payer deduction. Rows 13–15 ran at675ca2d115, whose code and YAML match the final head, against all 15 SC TANF YAML files and both property files. Rows 16–21 ran there againstintegration.yamland the property file, plus both gross income files for rows 19–21. Row 20's property run and row 15's case names are from the final head.git statuswas clean after each.integration.yamlCases 19, 20, 30, 31;sc_tanf_dependent_child.yamlCases 4, 8, 9; property (c)integration.yamlCases 21, 23, 25, 35, 36. Case 25 (January) is the ordering case; Case 21 fails on its asserted deduction, since this mutant moves the support into earned income.sc_tanf_gross_incomeintegration.yamlCases 21, 23, 25 (gross income); property (e)integration.yamlCases 23, 33sc_tanf_need_standard.yaml11 of 12;integration.yamlCases 1, 2, 5, 6, 15, 18, 26–29, 32;sc_tanf.yamlCase 8;sc_tanf_gross_income_eligible.yamlCase 5 and the eight "one cent above" cases;sc_tanf_countable_income_eligible.yamlCase 4integration.yamlCase 24;sc_tanf_dependent_child.yamlCase 3; both (f) differentialsheads_household = head_or_spouse)sc_tanf_dependent_child.yamlCases 5, 6, 7, 8;integration.yamlCases 26, 28, 29, 30oldestreplaced withTrue)sc_tanf_dependent_child.yamlCases 5, 6, 7, 8;integration.yamlCases 26, 28, 29, 30. Case 2 no longer kills it, because an input head now turns the rule off.return meets_age_test)sc_tanf_dependent_child.yamlCases 2, 5–9;integration.yamlCases 26–31oldest = person.get_rank(person.spm_unit, -age) == 0)sc_tanf_dependent_child.yamlCases 6, 7;integration.yamlCases 28, 29oldest = age >= person.spm_unit.max(age) - 1)sc_tanf_dependent_child.yamlCase 8;integration.yamlCase 30no_headterm (head_or_spouse | (no_adult & oldest)), the reading before this roundsc_tanf_dependent_child.yamlCase 9;integration.yamlCase 31min_(sum(support), max_(sum(income), 0))integration.yamlCases 22, 32, 36sc_tanf_gross_income_eligible.yamlCase 4 and the eight "one cent below" cases;integration.yamlCase 37integration.yamlCase 33max_(child_support_expense, 0)clampintegration.yamlCase 34integration.yamlCases 35, 36income - deduction)675ca2d115, before that example, random draws missed it and it survived.where(deduction > 0, max_(income - deduction, 0), income)integration.yamlCase 36The property tests killed rows 1, 3, 7 and 20 only. Every generated group has an adult head, only adults pay support, and no member has a loss. Row 13 was this body's mutant 13 before this round: the code now takes that reading, so the reverse mutant is the check.
The property tests found one real bug in round 1: countable income came out a float32 rounding error below zero when a deduction used up a payer's income. The stored float32 deduction can exceed the float64 income sum by about 3e-5.
sc_tanf_countable_incomefloors the result at the sum of the members' negative incomes. That sum is zero unless a member has a self-employment or farm loss. Generated groups have no loss and no negative income, so the floor leaves (f) exact.Tests
Each YAML file ran in its own process at
675ca2d115, whose code and YAML match the final head; the final head adds one example to the property file, which ran there. Every SC TANF YAML file passes, 145 cases in all:integration.yamlsc_tanf_gross_income_eligible.yamlsc_tanf_gross_unearned_income.yamlsc_tanf.yamlsc_tanf_need_standard.yamlsc_tanf_dependent_child.yamlsc_tanf_countable_earned_income_person.yamlsc_tanf_countable_income_eligible.yamlsc_tanf_eligible.yamlsc_tanf_income_eligible.yamlsc_tanf_resources_eligible.yamlsc_tanf_ssi_recipient.yamlsc_tanf_benefit_group_size.yamlsc_tanf_countable_resources.yamlsc_tanf_gross_earned_income.yamlThe no-adult cases:
sc_tanf_dependent_child.yamlCase 5 andintegration.yamlCase 26: a minor parent who lives with no adult and has no role inputs.The support cases: integration Cases 21, 23 and 25 have one payer who holds the group's income. Case 22 has a payer with no income, Case 32 an SSI recipient who pays, and Case 33 a dependent child who pays from survivor benefits. Case 34 has a negative support input, and Cases 35 and 36 a self-employment loss without and with a payer. Case 37 and the gross test file's boundary cases pin the limit's cents.
Python:
test_sc_tanf_child_earnings_support_invariants.pypasses 4 at the final head. Under/usr/bin/time -vit took 43.5 s wall clock including startup (7.7 s of tests) and peaked at 1,054,820 KB RSS. Before this round, at96bd29a40f, it took 43.5 s and peaked at 1,052,088 KB. Both are local runs on a 4 vCPU, 16 GB Linux VM with Python 3.14, not CI measurements. It builds simulations of small groups only, with no dataset. It sits outsidecore/andpolicy/and isn't a listed heavy module, so it runs in the Makefile'sremainingPython group, which the Makefile records at 14.4 GB and 22:18 in CI run 38141803955.test_sc_tanf_unearned_income_invariants.pypasses 2.code_health/test_source_conflicts.pypasses 103.test_known_dead_reference_urls.pypasses 40,test_reference_urls.py32 andtest_no_concatenated_reference_urls.py48.ruff format --checkandruff checkpass on the PR's nine Python files with the locked ruff 0.15.5. No partner test reads SC TANF, and none was edited; nothing under.github/changed. No microsimulation was run.CI: Pull request run 42641205118 passed all 36 jobs at
e4e6861e6a; none was skipped or cancelled.Overlap
Trial merges of this head with
git merge-tree --write-tree, against the current head of every open PR that touchessource_conflicts/candidates.yaml, an SC TANF file oris_tax_unit_head.py(35 PRs, listed on 2026-11-09):candidates.yaml: Model the Medicare Part D low-income subsidy as a CBO means-tested transfer #10127, Fix Arkansas tax indexing and Kentucky's 2021 dependent care credit #10324, Apply the Maryland and Maine EITC waivers of the 32(m) SSN requirement #10527, Apply each state's rule for a Medicaid applicant whose spouse is not aged, blind or disabled #10640, Apply the New York itemized deduction adjustment to IT-196 line 45 #10658 and Round NYC EIC worksheet reductions #10664. Against this head each has the same number of conflict hunks, and no hunk holds aus-sc:tanf-*id.ca_state_supplement.yaml. Apply the Maryland and Maine EITC waivers of the 32(m) SSN requirement #10527 (draft) also conflicts inMakefile,me_eitc.py,nj_eitc.pyandnj_eitc.yaml, the same files against main.is_tax_unit_head.pypicks a head for adult couples, and merges cleanly. Its couple candidates must already be adult candidates, so the no-adult rule here is unaffected.5783608cd1. This round's merge of main kept its sixus-sc:liheap-*entries ahead of this PR's threeus-sc:tanf-*entries.impact: pending a comparison on the default dataset for 2026, main against this branch.
axiom: TheAxiomFoundation/rulespec-us#1728 queued
🤖 Generated with Claude Code