Skip to content

Charge non-dependant deductions within the claimant's benefit unit - #2017

Draft
MaxGhenis wants to merge 29 commits into
hb-ctr-non-dep-exemptionsfrom
in-unit-non-dep-deductions
Draft

MaxGhenis wants to merge 29 commits into
hb-ctr-non-dep-exemptionsfrom
in-unit-non-dep-deductions

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2014

Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/benefit_unit_non_dependants.yaml::UC, an adult son in the renter's benefit unit bears a housing cost contribution; policyengine_uk/tests/test_benefit_unit_non_dependant_properties.py::test_deductions_match_the_oracle; policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/housing_costs_element/non_dep_deduction/uc_non_dep_deductions_renter_exempt.yaml::UC Sch 4 para 15, a partner whom reg 3(3) excludes from the claim brings no exemption by being blind; policyengine_uk/tests/test_uc_renter_exemption_properties.py::test_an_excluded_partner_never_changes_the_deductions

Stacked on #2007 (base hb-ctr-non-dep-exemptions). This PR lands through #2010, which contains it (see Merge order).

Merge order

This PR lands through #2010 and stays a draft. This PR charges an in-unit non-dependant's housing cost contribution, and #2010 gives them their bedroom (UC Sch 4 para 10(1)(c)). #2010 contains this PR by merge (7a99a5953 merges this head, d2faa3bc9c0a4f722603e7f0f4677af848f60c19), so the two reach main together when #2010 lands. On its own this PR charges the contribution without the room. For example, a claimant aged 45 who rents at £10,400 a year in Maidstone in 2026 has a partner whom reg 3(3) excludes from the claim and a son aged 22 in their benefit unit. This PR alone gives them 1 bedroom (category B, £9,000.00 a year), a £1,158.60 contribution and Universal Credit of £12,940.20. With #2010's room the same household has 2 bedrooms and £14,340.20. #2010 keeps its room; this PR doesn't copy it.

This PR needs #2007's HB and CTR claimant exemptions: HB reg 74(6), SPC reg 55(6) and CTR Sch 1 para 8(6). Without them, a blind claimant, or one receiving AA, the DLA care component, the PIP daily living component or AFIP, would newly lose HB and CTR for an adult son. Stacking on #2007's branch enforces the order: this PR cannot reach main before #2007 does. The order runs #2007, then #2010 with this PR inside it.

Problem

A benefit unit can include someone aged 16 or over who is neither the claimant or partner nor a child or young person the claimant is responsible for. Examples are an adult son, or a 19-year-old who has left education. In law that person is a non-dependant of the renter. The model treated them inconsistently:

  • lha_renter_has_non_dependant already counted them.
  • No deduction was ever charged for them:
    • uc_non_dep_deductions and housing_benefit_non_dep_deductions counted only people in other families (is_non_dependant_of_household_head). The individual eligibility variables also excluded anyone in a family liable for rent.
    • council_tax_reduction_non_dep_deductions subtracted the claimant's own benefit unit.

So a lone parent on UC with a 25-year-old son paid no housing cost contribution. The same son in his own benefit unit in the same household cost the parent £96.55 a month.

The model also lacked the UC renter exemption (Sch 4 para 15). Where the renter, or either joint renter, is blind or receives attendance allowance (reg 2's definition, armed forces independence payment included), the middle or highest DLA care component or the PIP daily living component, the Secretary of State deducts no contribution for any non-dependant. The renters are the claimants (para 1(2)), so a partner whom reg 3(3) leaves out of the claim brings no exemption.

The law

We fetched these texts from legislation.gov.uk on 2026-10-01.

  • UC, Sch 4 para 9:

    • (1) "the members of a renter's extended benefit unit are— (a) the renter (or joint renters); (b) any child or qualifying young person for whom the renter or either joint renter is responsible; and (c) any person who is a non-dependant."
    • (2) "A person is a non-dependant if the person normally lives in the accommodation with the renter (or joint renters) and is none of the following— (a) a person within sub-paragraph (1)(a) or (b); … (f) a person who has already been treated as a non-dependant in relation to a claim for universal credit by another person liable to make relevant payments …; (g) a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible."
    • Para 13(1): "a deduction is to be made in respect of each non-dependant who is a member of the renter's extended benefit unit".
    • Para 1(2): "Claimants who fall within sub-paragraph (1) are referred to in this Schedule as “renters” (and references to “joint renters” are to joint claimants to whom regulation 26(2) applies)."
    • Para 15(1): "No deduction is to be made under paragraph 13 in the case of— (a) any renter who is a single person to whom sub-paragraph (2) applies; or (b) any joint renter where at least one joint renter is a person to whom sub-paragraph (2) applies." Para 15(2) lists, among others, "(a) a person who is ... blind", "(b) a person in receipt of the care component of disability living allowance at the middle or highest rate", "(c) a person in receipt of attendance allowance" and "(d) a person in receipt of the daily living component of personal independence payment".
    • Reg 2: "'attendance allowance' means— (a) an attendance allowance under section 64 of the Contributions and Benefits Act; (b) an increase of disablement pension under section 104 or 105 of that Act …; (c) . . . (d) a payment by virtue of article 14, 15, 16, 43 or 44 of the Personal Injuries (Civilians) Scheme 1983 or any analogous payment; (e) any payment based on the need for attendance which is paid as an addition to a war disablement pension; (f) armed forces independence payment under the Armed Forces and Reserve Forces (Compensation Scheme) Order 2011".
    • Reg 3(3): "A person who is a member of a couple may make a claim as a single person if the other member of the couple—" (a) has not reached 18 and falls outside reg 8, (b) lives outside Great Britain, (c) serves as a prisoner, (d) has no entitlement under reg 19, or (e) falls within section 115 of the Immigration and Asylum Act 1999.
    • Para 16 exempts the non-dependant, including "(a) a person who is under 21 years old" and "(b) a person in receipt of state pension credit".
  • HB, HB Regs 2006 / HB (SPC) Regs 2006 reg 3:

    • (1): "'non-dependant' means any person, except someone to whom paragraph (2) applies, who normally resides with a claimant or with whom a claimant normally resides".
    • (2) excludes:
      • "(a) any member of the claimant's family";
      • "(c) a child or young person … not a member of his household by virtue of regulation 21";
      • "(d) … [a person] liable with the claimant … to make payments in respect of his occupation of the dwelling";
      • "(e)(i) any person who is liable to make payments on a commercial basis to the claimant or the claimant's partner".
    • (4): "a person resides with another only if they share any accommodation except a bathroom, a lavatory or a communal area within the meaning prescribed in paragraph 8 of Schedule 1 but not if each person is separately liable to make payments in respect of his occupation of the dwelling to the landlord".
    • The family is the couple and their children and young persons. A young person is a Child Benefit qualifying young person (reg 19).
    • Reg 74 / SPC reg 55 deduct for a non-dependant "aged 18 or over". Under (5): "Where a person is a non-dependant in respect of more than one joint occupier of a dwelling … the deduction … shall be apportioned between the joint occupiers … having regard to the number of joint occupiers and the proportion of the payments in respect of the dwelling payable by each of them."
  • CTR:

    • Definitions: SI 2012/2885 reg 9 (the same definition; family in reg 6); WSI 2013/3029 reg 9; SSI 2021/249 reg 8; SSI 2012/319 reg 3.
    • Reg 9(2)(e) excludes "any person who is liable to make payments on a commercial basis to the applicant or the applicant's partner".
    • Deductions are for non-dependants "aged 18 or over" (Sch 1 para 8 and equivalents).
    • Under para 8(5)(c), one who "is a non-dependant of two or more of the liable persons" is "apportioned equally between those liable persons".
  • CTR applicant (#2078): where a liable household head is not her benefit unit's claimant or partner, she applies alone (council_tax_reduction_head_applies_alone), and is_council_tax_reduction_applicant_or_partner is her alone. The benefit unit's couple then fall outside her family, so reg 9(2)(a) doesn't exclude them.

Change

Before (main + #2007) After
Who only members of other families who are not liable for rent also benefit-unit members who are neither the claimant/partner nor that scheme's child or young person:
• is_benefit_unit_non_dependant_for_universal_credit: 16+, not a UC qualifying young person (para 9(1)-(2)(a), (g));
• is_benefit_unit_non_dependant_for_legacy_benefits for HB: not a Child Benefit child or QYP (reg 3(2)(a), (c));
• new is_benefit_unit_non_dependant_for_council_tax_reduction for CTR: not the CTR applicant or partner (#2078's identity) and not a Child Benefit child or QYP (reg 9(2)(a), (c))
UC other families' non-dependants count in one claim, uc_non_dependants_counted (para 9(2)(f)) unchanged for other families. A family's own in-unit non-dependant counts in its own claim if that family is renting and claims UC, and otherwise in the counted claim. New para 15 exemption, uc_non_dep_deductions_renter_exempt, for the single claimant or either joint claimant (is_uc_single_or_joint_claimant), counting reg 2's attendance allowance (uc_receives_attendance_allowance). The para 16(2)(b) Pension Credit limb applies only to the claimant or partner, who receive it, so a pensioner's adult son is not exempt by her award.
HB #2007's per-couple amounts for other families, apportioned by rent share; none under the claimant exemption every non-dependant, in any family, pooled through #2007's deduction_per_family (one deduction per couple, the higher; each other adult separately) and apportioned between the joint occupiers by rent share (reg 74(5)). That includes a joint occupier's own adult son and a boarder's or lodger's. A boarder or lodger is not a joint occupier with the householder, so it also bears its own in-unit non-dependant in full. #2007's claimant exemption still zeroes the claim, and HB eligibility keeps #2007's individual exemptions.
National CTR #2007's two schemes (the head's family's and the other), other families' amounts per scheme, joint-liability share, the per-applicant exemption in each scheme, the model pools every non-dependant, a lodger's included. It leaves out the applicant's own family members (reg 9(2)(a)) and keeps its in-unit non-dependants, each couple once. It apportions the result by joint-liability share (para 8(5)) and charges claiming families only. The per-applicant exemption still zeroes the claim.
Local CTR (5 English schemes) other families' non-dependants unchanged: the model masks the local aggregation to the same other-family term as the eligibility

The renter exemption: claimants and attendance allowance

uc_non_dep_deductions_renter_exempt reads is_uc_single_or_joint_claimant, the single claimant or each joint claimant, less a partner whom uc_is_ineligible_partner flags under reg 3(3). A partner who stays a member of the couple for capital and income, but makes no claim, is neither a renter nor a joint renter (para 1(2)), so their blindness or disability benefit brings no exemption. In the household above, the claimant mask comes to [true, false, false].

The formula reads uc_receives_attendance_allowance for para 15(2)(c), as uc_non_dep_deduction_exempt already does for the non-dependant's para 16(2)(d). That variable counts reg 2's heads (a), Attendance Allowance, and (f), armed forces independence payment (gov.dwp.universal_credit.attendance_allowance_benefits). The model holds no separate amount for heads (b), (d) and (e), so it counts no renter who receives only one of them.

The other readers of is_claimant_or_partner that this PR adds keep it:

  • is_benefit_unit_non_dependant_for_universal_credit excludes the claimant and partner under para 9(2)(a), which names "a person within sub-paragraph (1)(a) or (b)", the renter or joint renters. Read literally, a partner whom reg 3(3) excludes falls outside (1)(a), so swapping in the claimant mask would make that partner the claimant's non-dependant, with a bedroom and a contribution, unless another para 9(2) limb leaves them out. Those limbs sit outside the text this PR quotes, so the formula keeps both members of the couple out of the non-dependants.
  • uc_non_dep_deduction_exempt gives the para 16(2)(b) Pension Credit limb to the claimant or partner of the non-dependant's own family, the people a Pension Credit award covers; it concerns that award, not the Universal Credit claim.
  • council_tax_reduction_non_dep_deductions tests the Welsh couple rule (WSI 2013/3029 Sch 6 para 5(3)), and is_benefit_unit_non_dependant_for_legacy_benefits applies HB reg 3(2)(a), "any member of the claimant's family". Neither scheme's quoted text has a rule like reg 3(3), so both keep the couple.

The Housing Benefit and CTR claimant exemptions (housing_benefit_non_dep_deductions_claimant_exempt, council_tax_reduction_applicant_has_non_dep_exemption) read attendance_allowance under their own regulations, not UC reg 2, and already count armed forces independence payment separately, so they stay as #2007 has them.

Joint occupiers and lodgers

A joint occupier's adult son normally resides with every joint occupier he shares accommodation with (HB reg 3(1), (4); CTR reg 9(1)). None of reg 3(2)(a)-(f) excludes him in relation to the other occupier, so he is a non-dependant of each, apportioned by reg 74(5) or para 8(5). That is how the model already treats a non-dependant in another family. So for joint occupiers (HB and CTR), and for CTR generally, the result does not depend on whether the survey codes the son in his parent's benefit unit or in his own: two YAML cases check the two codings give the same deductions. "Not modelled" lists the exceptions.

Reg 3(2)(e)(i) and CTR reg 9(2)(e) exclude only the person liable to pay the claimant. The household extension in (e)(iii) is for the landlord's side. So a lodger's adult son who pays nothing himself is the householder's non-dependant. For HB he is also the lodger's own.

An earlier head (155766b) charged a joint occupier's own son wholly to that occupier, citing LHA Guidance Manual 2.093 example 2 and HBGM A5 5.622. Neither supports that:

  • the LHA example concerns the size criteria and a sister, whom the model treats as another family's non-dependant and apportions;
  • 5.622 is conditional ("If a person is a non-dependant of only one of the joint occupiers").

2d54628 follows the text.

CTR: a head applying alone

Where a liable household head is not her benefit unit's claimant or partner, she applies alone (#2078). Her benefit unit's couple then fall outside her family and become her non-dependants (reg 9(1), (2)(a)). As a couple they pay one deduction, the higher (Sch 1 para 8(3)), or one for each member in the Welsh working-age scheme where the couple has a UC award (WSI 2013/3029 Sch 6 para 5(3)).

For UC and HB the couple stay the benefit unit's claimant and partner. As the householder who rents the accommodation, the head counts as no one's non-dependant (UC Sch 4 para 9(2)(d); HB reg 3(2)(d)-(e)). Both in-unit helpers exclude is_resolved_household_head. YAML cases pin both sides.

Local schemes

Merton, Kingston, Newham, Westminster and Oxford keep their own aggregation (_legacy.local_non_dep_deductions). The shared eligibility now also covers in-unit non-dependants, so the local aggregation masks the individual deductions to in_other_non_liable_family. The eligibility uses the same function: #2007's claimant-family test (outside every claiming, sharing or lodging family). So the local schemes charge the same deductions as on #2007's branch. #2077 (stacked on this PR) replaces the mask with each scheme's pooled aggregation.

Other compositions

Invariants (stated and tested)

test_benefit_unit_non_dependant_properties.py holds the Hypothesis properties. They run derandomized, with 10 examples each, on populations of up to 5 households. The populations include sharers, lodgers, non-dependant families, adult children, qualifying young persons (including looked-after ones), pensioner heads with working-age sharers, and exemption flags.

  1. Oracle (differential). A plain-Python calculation from the generated structure must match each family's UC, HB and CTR deductions, and who is eligible for an individual HB or CTR deduction.
    • It decides who is whose non-dependant, couples once, HB rent shares, lodgers' own in full, the applicant's own family left out, and the claimant exemptions.
    • It reads from the model: the individual amounts; which UC claim counts the household's non-dependants and whether a family claims UC; the CTR claim flags, joint-liability shares and each family's scheme. Other-scheme amounts come from the aggregator's own helper.
    • It checks that the members each scheme classes as in-unit non-dependants (UC, HB and CTR sets) match the generated non-QYP members.
  2. Conservation.
    • HB deductions (a couple's once) are borne in full across the joint occupiers, plus once more by a lodger for its own non-dependant, where no claimant is exempt.
    • CTR deductions are borne by each claiming family, under its own scheme, in proportion to its joint-liability share (Give sharers, boarders and lodgers their own rent, tenure and LHA category #2006's per-person shares need not sum to one); none where the applicant is exempt. This holds on the generator's domain (rent > 0, claimants liable).
    • Each UC contribution is borne by at most one family.
  3. Exemptions.
    • A para 15-exempt family has no UC deductions.
    • The model deducts nothing for anyone under 21 (UC) or under 18 (HB, CTR).
    • The model charges no one in a rent-liable family other than its in-unit non-dependants.
  4. No-op. Where no benefit unit contains a non-dependant, every family's deductions equal Fix HB and national CTR non-dependant deductions #2007's formulas with this PR's para 15 exemption and claim flag: UC through the counted claim, HB by rent share, and CTR per scheme by claim share, each with the exemptions.

test_uc_renter_exemption_properties.py checks two more, with 10 derandomized examples each over 8 households. Each household has a claimant aged 18 to 64 who rents and claims, a partner whom uc_is_ineligible_partner flags, an adult son in their benefit unit and an adult in a family of their own that makes no claim. The generator draws ages, earnings, rent and the claimant's own para 15(2) benefits.

  1. An excluded partner changes nothing. Making the flagged partner blind, or giving them Attendance Allowance, armed forces independence payment, the middle or highest DLA care rate or the PIP daily living component, in any combination, never changes any family's uc_non_dep_deductions or uc_non_dep_deductions_renter_exempt. Three explicit examples give the partner in the household above every benefit, blindness alone and armed forces independence payment alone.
  2. The claimant's armed forces independence payment exempts the claim. Giving the single claimant any positive armed forces independence payment always makes uc_non_dep_deductions_renter_exempt true and the claim's uc_non_dep_deductions nil.

Tests

  • benefit_unit_non_dependants.yaml: 41 cases at the regulations' 2026-27 amounts (UC £96.55 a month; HB £20.40, £64.35 and £105.20 a week).

    • UC: adult son; under 21; responsible QYP; looked-after QYP; renter on PIP; blind partner; a disabled child does not exempt the renter; son on AA; the family's PC; own plus other-family non-dependants; a non-dependant family's own adult; a sharer's own; housing element net of the contribution; a non-claiming head's son counted in the sharer's claim; a pensioner's Pension Credit not exempting her adult son.
    • HB: part-time son; £300-a-week daughter; under 18; Child Benefit young person; joint tenants share one tenant's son by rent share, with the same result when the survey codes him as his own unit; a lodger's son is the lodger's and the householder's; a blind sharer's son still half the head's; an exempt lodger's son still the householder's.
    • CTR: own family; under 18; jointly liable applicants share one's son equally; another family's adult, shared; a lodger's son is the householder's; non-claiming families bear nothing; no applicant bears a deduction for itself; a blind head or sharer exempts only its own claim; a head applying alone bears one deduction for her benefit unit's couple.
    • Composition cases with Fix HB and national CTR non-dependant deductions #2007: zero income, students, a parent's IS, a non-dependant couple with an adult son, England pensioner scales.
    • Local CTR (Newham): a jointly liable sharer does not bear the head's son.
  • uc_non_dep_deductions_renter_exempt.yaml: six cases, each through universal_credit and household_net_income, in the household above (claimant aged 45, partner aged 43, son aged 22, £10,400 rent, Maidstone, 2026). This PR alone gives the son no bedroom, so each case has 1 bedroom, category B, with the model's £9,000.00 a year; Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010 moves each to 2 bedrooms and adds £1,400.

    • reg 3(3) excludes the partner, who alone is blind: no exemption, £1,158.60 contribution, UC £12,940.20 (£5,098.80 + £9,000.00 − £1,158.60);
    • the same household with the claimant blind: exempt, UC £14,098.80;
    • a joint claim, both members eligible, with the partner blind: exempt, UC £17,003.64 (couple rate £666.97 × 12 = £8,003.64, plus £9,000.00);
    • nobody blind: £1,158.60 contribution, UC £12,940.20;
    • the single claimant receives £5,000 of armed forces independence payment and no Attendance Allowance: exempt, UC £14,098.80;
    • only the excluded partner receives it: £1,158.60 contribution, UC £12,940.20.

    Household net income adds the £100 Household Energy Payment and takes off the £180 TV Licence, which the model halves to £90 where a household member is blind. household_benefits lists afcs but not armed_forces_independence_payment, so household net income leaves out the £5,000 payment, as on main.

  • Updated eligibility YAMLs. A lone person in a single-person household is not anyone's non-dependant, so these tests state who the person is a non-dependant of. A 19-year-old on UC with no earnings is exempt under reg 74(8)(b), so the in-unit eligibility case uses a 30-year-old.

  • main's CTR case Where a household head applies alone, her own IIDB counts with her State Pension, and the father's does not (council_tax_reduction_prescribed_benefits.yaml) came in through Fix HB and national CTR non-dependant deductions #2007 and expected no deduction for the couple in her benefit unit. Under this PR they are her non-dependants, with one deduction of £5.20 a week (£270.40 a year, SI 2012/2885 Sch 1 para 8), so b3e0d76b8 makes the case expect council_tax_reduction_non_dep_deductions £270.40 and council_tax_benefit £1,195.968 (1,466.368 − 270.40). The case fails at 9c6a994fb, which merges Fix HB and national CTR non-dependant deductions #2007's head fde435bd3, and passes at b3e0d76b8.

  • main's income_from_capital.yaml has two cases, A household head applying alone keeps her tariff income when the couple she lives with gets Pension Credit and the savings-credit-only one, that put a Pension Credit couple in the benefit unit of a household head who applies for CTR alone. Under this PR the couple are her non-dependants (SI 2012/2885 reg 9(1)). Fix HB and national CTR non-dependant deductions #2007's exemption reads is_on_pension_credit, which marks the member DWP pays and not the other. So the council deducts England's lowest pensioner amount for the couple, £5.20 × 52 = £270.40, and CTR comes to £1,726 where main expected £1,996.40. Without d2faa3bc9 both cases fail; it updates their expectations and both pass. Whether the non-payee member of a couple on Pension Credit counts as on it for the para 8 exemption follows Fix HB and national CTR non-dependant deductions #2007's reading of "on a benefit", not text this PR quotes.

  • Mutations at d2faa3bc9, each run against uc_non_dep_deductions_renter_exempt.yaml and test_uc_renter_exemption_properties.py:

    • putting is_claimant_or_partner back as the renter: killed. Two cases fail (UC Sch 4 para 15, a partner whom reg 3(3) excludes from the claim brings no exemption by being blind and the excluded partner's armed forces independence payment case), and so does invariant 5 on all three explicit examples;
    • putting attendance_allowance > 0 back for para 15(2)(c): killed. The case UC Sch 4 para 15(2)(c), a single claimant on armed forces independence payment is exempt fails, and so does invariant 6.
  • At d2faa3bc9c0a4f722603e7f0f4677af848f60c19, locally with no survey data, each run under -n 4:

    • policyengine-core test on finance/benefit/family 1,864 passed, gov/dwp 968 passed and gov/local_authorities/council_tax_reduction 391 passed, none failing;
    • test_benefit_unit_non_dependant_properties.py 3, test_council_tax_reduction_claimant_properties.py 3, test_household_head_agreement_properties.py 3, test_non_dependant_deduction_properties.py 10, test_uc_afip_housing_contribution_properties.py 3 and test_uc_renter_exemption_properties.py 2 passed; the other files that read uc_non_dep_deductions, uc_receives_attendance_allowance or uc_is_ineligible_partner: test_benefit_cap_lha_scheme_split_properties.py 7, test_rent_of_sharers_boarders_and_lodgers_properties.py 6, test_uc_legacy_closure_properties.py 4, test_uc_non_dep_pension_credit.py 3, test_uc_receiving_education_properties.py 5, test_uc_single_claim_properties.py 8 and test_uc_work_related_groups_properties.py 14 passed; policyengine_uk/tests/code_health 3,172 passed. The Python property files ran on a build of this head whose tree differs only in the two YAML files 6900b88b7 and d2faa3bc9 change;
    • uvx ruff@0.17.2 format --check ., ruff check . and ruff check --select F811,F821 policyengine_uk report nothing; git diff --check over this branch's new commits reports nothing; git merge-tree --write-tree --name-only HEAD origin/main against main at 5c7744144 reports no conflict; .github/check_fix_pr.py passes on this title and body.

Impact (real microsimulation)

These figures come from the released enhanced FRS 2024-25 in uk-data 1.58.1 (HF snapshot 2526edbb, sha256 056e80fd…). The base is #2007 at 0b6c3db, this PR's base; the branch is 89beee8 (same model code as ae4e42b). Each figure comes from a real run of the full model. We count a survey household by its rent and members' ages, and suppress any cell from fewer than 10 survey households.

Effects, £m a year:

Year UC paid HB CTR awards Household net income Households gaining
2025 +57.5 0 <10 households +57.5 35k (43 survey households)
2026 +59.9 0 <10 households +59.9 35k (43)
2027 +59.0 0 <10 households +58.9 33k (42)
2028 +60.4 0 <10 households +60.4 33k (42)
2029 +61.9 0 <10 households +61.8 33k (42)
2030 +63.4 0 <10 households +63.4 33k (42)

No household loses. Poverty before and after housing costs changes for people in fewer than 10 survey households (suppressed).

Where it comes from (2026). Rerunning the branch with only uc_non_dep_deductions_renter_exempt (para 15) switched off changes no award. So the in-unit charge, the UC routing and the Pension Credit gate move nothing on the survey, and the whole UC effect is the para 15 renter exemption:

  • 42k benefit units (53 survey households) lose £71.0m of UC non-dependant deductions;
  • their housing costs element rises by £61.0m for 35k (43 survey households);
  • UC paid rises by £59.9m.

The in-unit group itself is 23k people (20 survey households): 18k aged 16-17 (12 survey households), 18-20 suppressed, none 21 or over. UC exempts everyone under 21 (para 16(2)(a)), and HB and CTR deductions change for fewer than 10 survey households.

Intermediate variables. council_tax_reduction_non_dep_deductions falls by £232.8m across 234k benefit units because non-claiming families now read zero (only claiming families bear deductions). The individual UC and HB deduction variables fall by tens of £bn because they now read zero for people who are nobody's non-dependant. No award changes through these.

These figures replace our earlier estimate of UC +£39.1m in 2026, from the old stack and uk-data 1.57.4. Both the model's base and the data have changed since then: for example, main added the single-claim rule uc_non_dependants_counted, and uk-data moved to 1.58.1. We haven't split the difference between the two estimates by cause.

Not modelled / follow-ups

  • A boarder's or lodger's adult relative whom the survey codes in his own benefit unit counts against the householder only. Coded in the lodger's unit, he counts against both, as reg 3(2)(e)(i) and (iii) give. The model cannot tell which separately coded adult is the lodger's. (The householder's own household is rightly not the lodger's non-dependant: reg 3(2)(e)(iii); UC Sch 4 para 9(2)(e).)
  • The model doesn't hold an in-unit non-dependant's own benefits (receives_benefits_in_own_right doesn't say which benefit). So the exemptions for a non-dependant on IS, income-based JSA or income-related ESA, or on UC with no earned income (HB reg 74(8), CTR Sch 1 para 8(8), SSI 2021/249 reg 90), never apply to them. The same son coded as his own benefit unit gets his own UC award and can be exempt. This sits inside a suppressed survey cell.
  • "Makes a UC claim" is the model's would-claim flag for a renting, UC-eligible family (claims_universal_credit), as in main's uc_non_dependants_counted. So a family flagged as claiming counts its own in-unit non-dependants even where its award is nil, though in law a family with no claim treats no one as its non-dependant (para 9(2)(f)). A family flagged as not claiming, which the survey's take-up draws produce, passes them to the counted claim, and a YAML case pins that. Real entitlement cannot be the test without a branch calculation, because UC entitlement depends on these deductions.
  • An in-unit parent of a child under 5 in the same benefit unit bears a UC contribution. Para 16(2)(i) exempts a non-dependant responsible for a child under 5, but the model gives responsibility for the benefit unit's children to its claimant or partner, and UC reg 4(4) gives a child to one person only.
  • Two in-unit non-dependants who are a couple (neither the benefit unit's claimant nor partner) pay two HB deductions, not one on their joint income (reg 74(3)-(4)). The model has no relationship data to pair them. The FRS gives every couple its own benefit unit, so this arises only in user-entered households. For CTR, the council charges the couple in a head-applies-alone family once (both members in the Welsh working-age scheme with a UC award).
  • A joint occupier's or lodger's young person aged 18-19. Read literally, they are the other occupier's non-dependant, since they are not in that occupier's family. The model treats them as no one's.
  • Inherited from Give sharers, boarders and lodgers their own rent, tenure and LHA category #2006:
    • per-person joint-liability shares, so for a couple jointly liable with a single sharer, part of each pooled CTR deduction falls on no one;
    • the model apportions FRS sharers with their own agreement as joint occupiers, although reg 3(4)'s tail and reg 74(5) would charge each claim in full.
  • Local English CTR schemes: Charge in-unit non-dependants in the local Council Tax Reduction schemes, and exclude a lodger personally only outside the head's family #2077.

axiom: UC Sch 4 para 13 encoded-correct; TheAxiomFoundation/rulespec-uk#413 queued (UC Sch 4 paras 15-16); TheAxiomFoundation/rulespec-uk#406 queued (UC Sch 4 para 9, HB reg 3, CTR reg 9: who is a non-dependant, joint occupiers, lodgers, the household head); TheAxiomFoundation/rulespec-uk#407 queued (HB reg 74, SPC reg 55, CTR Sch 1 para 8)

🤖 Generated with Claude Code

MaxGhenis and others added 4 commits October 1, 2026 13:23
…ze criteria

Universal Credit: a qualifying young person the renter is responsible for has
a bedroom (UC Regs 2013 Sch 4 para 10(1)(b)), and any other member aged 16 or
over is a non-dependant with one (para 9(2), 10(1)(c)), except a qualifying
young person no one is responsible for (para 9(2)(g)).

Housing Benefit: every member aged 16 or over other than the claimant or
partner is a person who is not a child (HB Regs 2006 and HB (SPC) Regs 2006
reg 13D(3)(b); reg 2(1)).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
YAML cases for a qualifying young person aged 17 and 19, an 18-year-old
non-dependant, a looked-after qualifying young person (no UC bedroom), a
couple with a young person and two younger children (category E), a partner
aged 19 (no extra bedroom) and a pensioner couple's grandchild under HB (SPC).
Two LHA_claimant_composition cases asserted the old one-bedroom count for an
apprentice non-dependant and an 18-year-old qualifying young person; both are
now two bedrooms (Sch 4 para 10(1)(c) and (b)).

Hypothesis properties: bedrooms never fall when a person aged 16-19 joins any
family; the exact change when they do; and agreement with an independent
count of the size criteria, children's rooms found by brute force.

Fixes #2008

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t's benefit unit

A member of a benefit unit aged 16 or over who is not the claimant, partner
or a qualifying young person (UC) or child or young person (HB, CTR) is a
non-dependant of the renter (UC Regs 2013 Sch 4 para 9; HB Regs 2006 and HB
(SPC) Regs 2006 reg 3; SI 2012/2885 reg 9 and the Welsh and Scottish
equivalents). The deductions now charge them:

- UC: to the renter's own claim; non-dependants in other families stay with
  the household head's claim (para 9(2)(f)). Adds the para 15 renter
  exemption and limits the para 16 Pension Credit exemption to the claimant
  or partner who receives it.
- HB: apportioned between joint occupiers by rent share (reg 74(5)); a
  boarder or lodger bears their own.
- National CTR: pooled across the claiming families by joint-liability
  share; only claiming families bear deductions.

Fixes #2014.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 1, 2026 15:12
… cost contributions

UC Regs 2013 Sch 4 para 15(1)(a) turns on the renter's own circumstances;
found by a mutation that applied the exemption to every family member.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mutation testing (15 one-line mutations of the new logic) left the
in-unit age floor surviving the YAML tests, and dropping in-unit
non-dependants from HB or CTR eligibility surviving the properties. The
YAML case now checks a child's classification, and the oracle checks HB
and CTR eligibility independently. All 15 mutations are now killed by both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 1, 2026
Reg 9(2)(a) excludes the applicant's family (claimant, partner and the
children they are responsible for) from non-dependants, not every member of
the FRS benefit unit. PR #2017 charges non-dependants who share a benefit unit
with the claimant, so the property now asserts that no claimant or partner
of a claimant family is a non-dependant. It holds on this branch and on its
composition with #2017.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
A non-dependant in a family's own benefit unit is that family's alone, not
shared between joint occupiers: DWP guidance treats a joint tenant's sister
as "Sarah's non-dependant" only (LHA Guidance Manual 2.093, example 2) and
says "if a person is a non-dependant of only one of the joint occupiers,
take the whole of the deduction from that joint occupier's entitlement"
(HBGM A5 5.622). Reg 74(5) and CTR Sch 1 para 8(5) apportionment now apply
only to non-dependants from other families. A lodger's family is one
commercial arrangement for CTR too, so its adult son is no one's
non-dependant there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Follows #2017's decision: a non-dependant in a joint occupier's own benefit
unit is that occupier's only (LHA Guidance Manual para 2.093 example 2;
HBGM A5 para 5.622). Other families' non-dependants still reside with each
joint occupier.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Applies #2007 at 6257277 (59c7082 plus the
r1 review commit) onto #2017 (in-unit non-dependants, #2006 rent shares):

- One definition of claimant or partner: #1896's is_claimant_or_partner
  variable. #2007's proxy helper (benefit-unit head or any member who is not
  a Child Benefit child or QYP) is removed and its call sites read the
  variable.
- HB and national CTR aggregation: another family's non-dependants per
  deduction_per_family (the couple's higher amount, both for a Welsh
  working-age UC couple, and each other member's own), counted once per
  family and apportioned by rent share (HB) or joint-liability share (CTR);
  a family's own in-unit non-dependants in full (LHA Guidance Manual 2.093;
  HBGM A5 5.622); the claimant exemptions. charged_to_other_families
  ("household minus own family") is no longer used and is removed.
- #2007's property oracle reads is_claimant_or_partner; the in-unit
  property oracle counts a couple once and applies the claimant exemptions.
- Drops council_tax_reduction_pension_credit.yaml and the
  in_receipt_of_guarantee_credit output (#1909, main only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Follows #2017's decision: a non-dependant in a joint occupier's own benefit
unit is that occupier's only (LHA Guidance Manual para 2.093 example 2;
HBGM A5 para 5.622). Other families' non-dependants still reside with each
joint occupier.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 2, 2026 04:34
…ions say

Review r2 (F3, F4, F5) found three departures from the text.

F3. 155766b charged a joint occupier's own adult son wholly to that
occupier, citing LHA Guidance Manual 2.093 example 2 and HBGM A5 5.622. HB
reg 3(1) and (4) and CTR reg 9(1) make him a non-dependant of every joint
occupier he shares accommodation with: none of reg 3(2)(a)-(f) excludes him
in relation to the other occupier. Reg 74(5) and CTR Sch 1 para 8(5) then
apportion him. The LHA example concerns the size criteria and a sister, whom
the model already treats as another family's non-dependant and apportions;
5.622 is conditional. The old rule also made the result depend on whether the
survey codes the son in his parent's benefit unit or his own. HB and national
CTR now pool every non-dependant, in any family, and apportion by rent share
(HB) or joint-liability share (CTR).

F4. A lodger's adult son was no one's non-dependant for CTR. Reg 9(2)(e)
excludes only the person liable to pay the applicant, as HB reg 3(2)(e)(i)
does; the household extension in (iii) is for the landlord's side. He is now
eligible and is the householder's non-dependant for CTR and HB, and still
the lodger's own for HB, in full, since they are not joint occupiers.

F5. Widening the shared CTR eligibility made a jointly liable sharer's local
claim bear the head's own son (Newham: £489.84 in 2025). The local
aggregation now counts only other families' non-dependants, as before, so
this change is neutral for the five local schemes until each council's
aggregation is brought into line.

YAML: joint tenants share one tenant's son by rent share (and get the same
result with him coded in his own unit); jointly liable applicants share one's
son equally; a lodger's son is the householder's non-dependant (HB and CTR)
and the lodger's (HB); Newham sharer does not bear the head's son. Property
oracle and conservation invariants restated for pooling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The local schemes' aggregation masks the shared individual deductions to
members of other families not liable for rent, so it stays as on base while
the national eligibility also covers in-unit non-dependants. That mask must
be exactly the eligibility's other-family term. #2009 changes the term to the
claimant family, so that a sharer with no rent is a claimant and not a
non-dependant (reg 9(2)(d)). in_other_non_liable_family now holds the term
once, and both the eligibility and local_non_dep_deductions call it, so
composing with #2009 is one edit.

No change in behaviour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
… deduction code

Follows #2017 at 2d54628 (review r2 F3/F4): a non-dependant normally
resides with each joint occupier whichever family they belong to (HB reg
3(1), (4); reg 74(5)), including a joint tenant's own adult son and a
lodger's adult son (reg 3(2)(e)(i) excludes only the person liable to pay
the claimant). A boarder or lodger keeps only their own family's.

Both flags now count the same people the deduction formulas charge, so a
deduction always implies a non-dependant, including for a family with no
claimant or partner (review r1 finding 3). "Joint renter" in the UC
docstring becomes "sharer of the rent" (in UC Sch 4 it means a joint
claimant; review r1 finding 6).

New YAML cases: a lodger's adult son (HB non-dependant of the householder
and the lodger; UC counts him in the lodger's claim only, para 9(2)(f)),
and a looked-after 16-year-old school leaver with a young single HB
claimant (C, not A; #2016 review r2 N9).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
… deduction code

Follows #2017 at 2d54628 (review r2 F3/F4): a non-dependant normally
resides with each joint occupier whichever family they belong to (HB reg
3(1), (4); reg 74(5)), including a joint tenant's own adult son and a
lodger's adult son (reg 3(2)(e)(i) excludes only the person liable to pay
the claimant). A boarder or lodger keeps only their own family's.

Both flags now count the same people the deduction formulas charge, so a
deduction always implies a non-dependant, including for a family with no
claimant or partner (review r1 finding 3). "Joint renter" in the UC
docstring becomes "sharer of the rent" (in UC Sch 4 it means a joint
claimant; review r1 finding 6).

New YAML cases: a lodger's adult son (HB non-dependant of the householder
and the lodger; UC counts him in the lodger's claim only, para 9(2)(f)),
and a looked-after 16-year-old school leaver with a young single HB
claimant (C, not A; #2016 review r2 N9).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mutation check v3 found that dropping the applicant's own-family
subtraction survived every test: with formula-computed eligibility the
applicant's family never has an eligible member. An individual deduction set
directly as an input does, and reg 9(2)(a) still keeps the applicant's own
family out of its non-dependants, as base did. The YAML case pins it.

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

Copy link
Copy Markdown
Collaborator Author

Ready for hub review
Idle PR check at main 2da212a

All 21 heads matched the brief's SHAs (git rev-parse refs/pr/<n>). The clone was shallow at first, so git merge-tree reported "no merge base" for #1837; I unshallowed (git fetch --unshallow) and reran every merge check. "Last commit" is the head commit's committer date (UTC). "Reviews" is each reviewer's latest non-pending review state. "Comments since" counts issue comments created after the head's committer timestamp. Overlap uses pulls/<n>/files for all 68 open PRs (the count in brackets is the number of shared files); for stacked PRs GitHub lists files against the PR's base branch, not main.

PR Head Last commit Reviews Comments since Merge with main Tests run (passed / failed / skipped, wall) Overlapping open PRs Label
#1837 5d83b136b 2026-08-29 none 1 conflicts: 5 files (A) not run (conflict) #1969 (2), #2077 (1), #2131 (2), #2647 (1), #2688 (3) possibly superseded by #1824
#1910 2d0e49417 2026-10-22 vahid-ahmadi: commented 2 conflicts: 2 files (B) not run (conflict) #1966 (1), #1995 (1), #2007 (2), #2077 (3), #2301 (1), #2302 (1), #2647 (1), #2768 (1), #2809 (1), #2813 (5) conflicts with main
#1963 69c919f60 2026-10-28 none 0 conflicts: 3 files (C) not run (conflict) #1995 (2), #2077 (7), #2265 (1), #2340 (3), #2670 (1), #2772 (1), #2780 (1) conflicts with main
#1966 779f5dcfd 2026-10-21 none 0 conflicts: tests/test_means_test_income_properties.py not run (conflict) #1910 (1), #1969 (1), #1995 (2), #2007 (3), #2077 (2), #2279 (1), #2300 (1), #2301 (1), #2302 (1), #2647 (1), #2688 (1), #2768 (1), #2794 (1), #2808 (3), #2809 (1) conflicts with main
#1995 1b8f2dedea 2026-10-21 none 1 conflicts: 6 files (D) not run (conflict) #1910 (1), #1963 (2), #1966 (2), #1969 (2), #2002 (3), #2007 (2), #2017 (1), #2035 (1), #2077 (9), #2301 (3), #2302 (3), #2688 (2), #2776 (1), #2794 (1) conflicts with main
#2002 6df59cdb4 2026-10-03 none 1 conflicts: 22 files (E) not run (conflict) #1969 (1), #1995 (3), #2007 (1), #2017 (3), #2077 (3), #2301 (1), #2302 (1), #2638 (1), #2688 (1), #2761 (1), #2781 (1) conflicts with main
#2016 1f3ce21a0 2026-10-02 none 2 conflicts: 12 files (F) not run (conflict) #2010 (3), #2030 (36), #2035 (6), #2055 (3), #2080 (5), #2279 (1), #2300 (1), #2301 (1), #2302 (1), #2815 (1) conflicts with main
#2017 3efa8bd60 2026-10-21 none 0 conflicts: 7 files (G) not run (conflict) #1995 (1), #2002 (3), #2007 (5), #2035 (3), #2077 (4), #2815 (1) conflicts with main
#2030 c98930c3a 2026-10-02 juaristi22: changes requested 5 conflicts: 17 files (H) not run (conflict) #2010 (4), #2016 (36), #2035 (8), #2055 (3), #2080 (5), #2279 (1), #2300 (1), #2301 (1), #2302 (1), #2815 (1) conflicts with main
#2035 b435c91e2 2026-10-03 none 1 conflicts: 14 files (I) not run (conflict) #1995 (1), #2007 (2), #2010 (2), #2016 (6), #2017 (3), #2030 (8), #2055 (4), #2077 (1), #2080 (4) conflicts with main
#2055 251012f5e 2026-10-03 none 1 conflicts: 15 files (I + housing_benefit_shares_accommodation.py) not run (conflict) #2010 (1), #2016 (3), #2030 (3), #2035 (4), #2080 (3) conflicts with main
#2077 cf0475ddb 2026-10-22 vahid-ahmadi: commented 1 conflicts: same 7 files as #2017 (G) not run (conflict) 40 open PRs (J) conflicts with main
#2080 4e7cfd70a 2026-10-03 juaristi22: commented 1 conflicts: same 12 files as #2016 (F) not run (conflict) #2010 (2), #2016 (5), #2030 (5), #2035 (4), #2055 (3) conflicts with main
#2265 e4c54d7fa 2026-10-23 vahid-ahmadi: commented 1 conflicts: simulation.py, tests/test_input_records.py, utils/supplied_inputs.py not run (conflict) #1963 (1), #1969 (1), #2007 (1), #2077 (2), #2308 (1), #2627 (1), #2661 (1), #2670 (1), #2765 (1), #2776 (1), #2781 (1), #2807 (1) conflicts with main
#2300 c710718dc 2026-10-22 none 1 conflicts: tests/test_child_and_adult_definitions_properties.py, tests/test_means_test_income_properties.py not run (conflict) #1966 (1), #2016 (1), #2030 (1), #2077 (1), #2279 (11), #2301 (11), #2302 (20), #2813 (1) conflicts with main
#2301 cf381c188 2026-10-22 none 1 conflicts: tests/test_child_and_adult_definitions_properties.py not run (conflict) #1910 (1), #1966 (1), #1995 (3), #2002 (1), #2016 (1), #2030 (1), #2077 (5), #2279 (12), #2300 (11), #2302 (47), #2776 (1), #2807 (2), #2813 (1) conflicts with main
#2302 98a473909 2026-10-22 none 3 conflicts: tests/test_child_and_adult_definitions_properties.py not run (conflict) #1910 (1), #1966 (1), #1995 (3), #2002 (1), #2016 (1), #2030 (1), #2077 (5), #2279 (12), #2300 (20), #2301 (47), #2776 (1), #2807 (2), #2813 (1) conflicts with main
#2308 5b4dc2143 2026-10-11 juaristi22: approved 0 conflicts: simulation.py, utils/supplied_inputs.py not run (conflict) #1969 (1), #2007 (1), #2077 (1), #2265 (1), #2661 (1), #2765 (1), #2776 (1), #2807 (1) conflicts with main
#2409 717b66a53 2026-10-14 juaristi22: commented 0 conflicts: .github/workflows/test-suite.yaml not run (conflict) #2077 (2), #2765 (1), #2771 (2) conflicts with main
#2249 82a4db385 2026-10-10 juaristi22: approved 0 clean none: the PR changes no file under policyengine_uk/tests (it adds .github/workflows/axiom-parity.yaml and a changelog entry) none clean and passing (no own tests to run)
#2634 b2a3e5169 2026-10-25 none 0 clean YAML vat_grossing.yaml: 5 passed, 0 failed, 0 skipped, 23 s; Python test_vat_grossing_properties.py: 7 passed, 1 failed, 0 skipped, 346 s (exit 1) none clean, with failing tests

Paths in the merge column are under policyengine_uk/ unless they start with docs/ or .github/.

Conflicting files

Stacking (from pulls/<n> base refs and git merge-base --is-ancestor)

Failures

#2634, local merge of main into b2a3e5169 (merge commit 5765740fa): policyengine_uk/tests/test_vat_grossing_properties.py::test_vat_is_statutory_liability_over_the_shipped_product, assertion at line 103: assert value == pytest.approx(expected, rel=1e-5, abs=1e-2).

  • Run 1 (-n 4, random seed): assert np.float32(15488.769) == 15619.472131948753 ± 0.156195, failing case spend=[(0.0, 146510.64859767928)]. Hypothesis stopped shrinking after five minutes and printed seed 320551620663142353140068881523791551106. Summary: 1 failed, 7 passed in 339.10s.
  • Run 2, to check whether it repeats (same node on the same merge, --hypothesis-seed=320551620663142353140068881523791551106): it failed again with assert np.float32(15488.699) == 15619.402985074628 ± 0.156194, case spend=[(0.0, 146510.0)]. Summary: 1 failed in 346.42s.
  • Run 3, the same node and seed at the unmerged PR head b2a3e5169 (after uv sync --frozen --extra dev on that head's lock): it also failed, with assert np.float32(1632.0946) == 1645.8422174840089 ± 0.0164584, case spend=[(0.0, 15438.0)]. Summary: 1 failed in 339.04s. So the failure is not caused by the merge.

I did not read the model's VAT code, so I don't explain the gap.

No other PR's tests were run (see below).

Evidence for "possibly superseded"

#1837 and merged #1824 (merged 2026-08-26, squash commit dd301b9c3 on main; not an ancestor of #1837's head). Both change parameters/gov/dwp/universal_credit/means_test/capital/sources.yaml to stop private pension wealth inside corporate_wealth counting as Universal Credit capital, and both cite policyengine-uk-data#452 in the description or commit. #1837 removes corporate_wealth from the list; #1824 keeps it and adds a separate disregarded private_pension_wealth input.

Main has since moved on again: at 2da212a the list is savings, cash_isa, share_like_capital (last first-parent changes #1974, #2447, #2589).

Superseded checks that found nothing

For each conflicting PR I listed main's commits since the merge base that touch the conflicting files. Where a title looked related I compared the two diffs on the shared file:

I did not compare diffs line by line for #1966, #2002, #2016, #2017, #2030, #2035, #2055, #2077, #2080, #2300, #2301, #2302 or #2308. For these, main's commit titles on the conflicting files (for example #2082's claimant-role work, #2213's non-dependant history and #2466's UC housing contribution exemption) did not describe the same change. That isn't proof that nothing supersedes them.

Skipped, and why


Generated by Claude Code

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

Reviewed 3efa8bd6082f9d7bf32d6351f21f1d729327b2e3, using the 21-path stack delta against #2007 rather than attributing parent changes to this PR. Review PARTIAL; no confirmed findings so far.

62 repository tests passed: 59 changed YAML cases and all three new properties. A native comparison of the same adult son inside versus outside the parent’s model benefit unit also passed through final awards and household income: HB £7,053.80, CTR £1,230.60 and income £21,086.25 on the HB route; UC £14,340.20 and income £27,142.05 on the UC route. An initial diagnostic used the wrong CTR entity; it was corrected and excluded from findings.

The independent source review is complete, including the Scottish deduction/apportionment rules and the linked Axiom queue addenda. The remaining material check is execution of the modified direct CTR-claimant and household-head/agreement regression properties. There are no CI results at this exact head, so hosted coverage cannot fill that gap. I will carry forward the completed checks and resume only the outstanding regressions.

Approval remains withheld: this PR is a draft, #2007 must merge, it must be retargeted to main, and applicable checks must pass at the reviewed head. The parent’s whole implementation and future merge result were not recertified.

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

Follow-up at unchanged head 3efa8bd6082f9d7bf32d6351f21f1d729327b2e3: the remaining validation gap is resolved; code/source review COMPLETE, with no confirmed findings.

Both outstanding integration files ran in full: all six tests passed, including 90 generated examples checking CTR claimant identity, household-head agreement and their final reductions. Together with the retained checks, that is 68 repository tests passed across the two rounds, plus the corrected native final-benefit/income comparison. The unchanged source evidence was revalidated and reused.

I’m continuing to withhold approval because this is a draft, #2007 must merge and this PR must be retargeted to main, and there are still no CI results at this exact head. Once those readiness conditions change, the completed review can be reused with checks of the actual new delta and current CI.

Keeps #2007's reg 74(3) and 74(5) sentences and #2017's in-unit wording.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KBpj2nEGrPeiuxZmW
…B CTR case

Main's case predates the in-unit non-dependant deduction: the mother and
father are the grandmother's non-dependants, one deduction of 5.20 a week.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KBpj2nEGrPeiuxZmW
MaxGhenis pushed a commit that referenced this pull request Nov 3, 2026
…ing alone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KBpj2nEGrPeiuxZmW

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

Re-reviewed exact head b3e0d76b887851d0d04a56c84ba092cc16086e54. Review COMPLETE, with two confirmed blockers. All 281 targeted tests passed, and the counterexamples were checked through final UC with independent primary-source corroboration.

C1 — Limit the renter exemption to actual UC claimants. The new exemption includes is_claimant_or_partner, so a partner excluded under reg 3(3) can cancel a non-dependant's contribution. Schedule 4 paragraphs 1–2 and 15 limit the exemption to the renter or actual joint claimants. In the 2026 Maidstone case—claimant 45, excluded partner 43, ordinary son 22, £10,400 rent—making only the excluded partner blind cancels £1,158.60/year and raises UC from £12,940.20 to £14,098.80 at this head's existing one-bedroom cap. Please restrict the mask and add the final-award regression. This is the same exemption issue reported as C3 on #2010.

C2 — Integrate the adult non-dependant bedroom before charging its contribution. In the same non-blind household, the new charge applies but the older room reader still omits the son's bedroom. Schedule 4 paragraphs 9–10 require that room. Two bedrooms cover the £10,400 rent; after the valid contribution, UC should be £14,340.20, rather than £12,940.20: a £1,400/year shortfall. The room omission predates this PR, but the new charge deepens the composition error. Integrating the matching #2010 room repair and testing the combined head can resolve it.

These are separate effects: correcting only the exemption leaves the ordinary household's missing room; adding only the room leaves the excluded-partner exemption wrong. Approval is withheld pending both fixes and checks on the resulting head.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6HoH87XjnfRqcGiYmc
…ndance allowance

Sch 4 para 1(2) makes the claimants the renters, so a partner whom reg 3(3)
leaves out of the claim brings no para 15 exemption. Para 15(2)(c) carries
reg 2's definition of attendance allowance, so armed forces independence
payment exempts the renter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6HoH87XjnfRqcGiYmc
…dence payment

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6HoH87XjnfRqcGiYmc
… allowance

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6HoH87XjnfRqcGiYmc
main's income_from_capital.yaml cases put a Pension Credit couple in the
benefit unit of a household head who applies for CTR alone. Under this branch
the couple are her non-dependants; the model exempts the member DWP pays and
not the other, so the council deducts 5.20 x 52 = 270.40 and CTR comes to
1,726.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6HoH87XjnfRqcGiYmc
MaxGhenis pushed a commit that referenced this pull request Nov 4, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6HoH87XjnfRqcGiYmc

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

Follow-up at d2faa3bc9c0a4f722603e7f0f4677af848f60c19 — COMPLETE; changes requested.

C1 resolved: the renter exemption now uses actual UC claimants and the attendance-allowance predicate that includes AFIP.

C2 remains open: the standalone parent charges the adult son’s £1,158.60 contribution while allowing one bedroom. In the 2026 Maidstone case, this gives UC of £12,940.20 instead of £14,340.20: £1,400/year short. The adopted two-bedroom repair in #2010 gives the expected result, but this captured parent still needs that integration before it can stand alone. See the one-room oracle at line 36 and UC Schedule 4, paragraphs 9–10.

A1: update the actual RuleSpec issue #413 with the regulation 2 AFIP definition and matching externally sourced AFIP-positive/excluded-partner-negative companion cases. The proposed document in a PR comment has not updated that record.

Validation: 17 current-head checks passed (14 YAML, two properties and one final-result diagnostic). No hosted CI is available for this stacked head; the PR remains draft.

@MaxGhenis MaxGhenis changed the title Charge non-dependant deductions for non-dependants within the claimant's benefit unit Charge non-dependant deductions within the claimant's benefit unit Nov 4, 2026
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

@juaristi22 Thanks for the follow-up. #2017 won't merge on its own, so C2's one-bedroom award never reaches main. It stays a draft, and #2010 contains it by merge (7a99a5953 merges d2faa3bc9), so the son's contribution and his bedroom land together. Your #2010 review finds that path gives the £14,340.20 award.

For A1, we've added the reg 2 definition of attendance allowance and the companion cases to rulespec-uk#413: TheAxiomFoundation/rulespec-uk#413 (comment). In case 4 the claimant receives armed forces independence payment and DWP deducts no contribution. In case 5 only the excluded partner receives it, and DWP deducts the £1,158.60.

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

Scope/reply follow-up at d2faa3bc9c0a4f722603e7f0f4677af848f60c19 — COMPLETE; all findings resolved within the stated delivery condition.

C2 resolved by guarded combined delivery: the author’s explicit condition keeps #2017 draft and prevents it landing alone. Merge 7a99a5953 puts this exact head into the reviewed #2010 combined head, where the contribution and two-bedroom repair land together and produce UC of £14,340.20 in the tested case.

The standalone one-bedroom tree still produces £12,940.20, £1,400/year short. This resolution does not certify that tree for standalone approval. A persistent delivery guard requires reassessment and the bedroom repair before any standalone/Ready route can be accepted.

A1 resolved: the actual #413 addendum now contains the missing definition and companion cases. C1 remains resolved. The 17 passing checks are retained at the unchanged code head; no tests or model calculations were repeated. This follow-up is a comment, with the draft/delivery hold preserved.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Nov 5, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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

Incremental review COMPLETE at 109fe2dd4471e0bd01e8acf69e22dac24b6ad51a, with no new findings or material evidence gaps. C1 and A1 remain resolved. C2 remains conditionally resolved only through the combined #2010 delivery.

Current validation: 76 YAML cases and two native final-result cases passed; prior checks remain separate historical evidence. Current #2010 at 56de9a6 contains this head. The standalone tree still gives the retained adult-son case one bedroom and UC £12,940.20, whereas the combined bedroom repair gives two bedrooms and UC £14,340.20. The £1,400 difference therefore remains relevant to standalone delivery.

I retain the author's explicit restriction: keep this PR Draft and deliver it through the reviewed combined #2010 path. This is a comment, not standalone approval. #2010's separate stale ESA test fixture also needs correction before that delivery is ready.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Nov 5, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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

Incremental review COMPLETE at ae2be5fbec63a9f51ef0b59d4b742fba4f37a1b5, with no new findings or material evidence gaps. C1 and A1 remain resolved; C2 remains conditionally resolved through combined #2010 delivery.

The only change is the same explicit legacy-closure no-claim preference in the held-ESA fixtures. The two edited fixture contracts were checked through the identical-file proof and the 32 passing cases executed on current #2010, with exact environment/import preflight for this snapshot. No tests were newly executed on #2017; its prior 76 YAML and two native passes remain historical evidence.

Current #2010 at 1bda541 contains this head. The retained comparison still has one bedroom on standalone #2017 versus two in combined #2010, with the £1,400 UC difference. The production difference responsible for that restriction is unchanged. All 33 retained source pairs and the actual queue records were revalidated.

The author's merge-only restriction remains: keep this Draft and deliver through the reviewed combined #2010 path. This comment does not approve standalone delivery.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants