Skip to content

Give benefit-unit members aged 16 or over a bedroom under LHA rules - #2010

Open
MaxGhenis wants to merge 106 commits into
mainfrom
lha-bedroom-young-people
Open

MaxGhenis wants to merge 106 commits into
mainfrom
lha-bedroom-young-people

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2008
Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_young_person_bedroom.yaml::A qualifying young person has their own bedroom; 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_the_single_claimants_afip_removes_the_deductions
axiom: TheAxiomFoundation/rulespec-uk#527 queued; 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)

Merge order

This PR contains #2007 and #2017 by merge. 0198ce4c9 merges main at 5c7744144 into #2007's head fde435bd3, and 6900b88b7 supplies Housing Benefit with main's supplied benefit cap totals. 9f951ed43 merges that into #2017's head b3e0d76b8; #2017 then limits the renter exemption to the claimants and counts reg 2's attendance allowance (866d0941f, 65009ed34, 33cd8db44) and moves two of main's CTR cases for its deduction (d2faa3bc9). 7a99a5953 merges #2017's head d2faa3bc9 into this branch. Git reported no conflict in the last two merges. af54f8fec moves the renter exemption cases to the 2 bedrooms this PR gives the son, and 135b41ef8 lets property 4's test read main's new qualifying young person route (UC reg 5(1)(a)). #2007's ce2aef8c6 then merges main at fed9bcabe, 109fe2dd4 merges that into #2017, and 56de9a693 merges that into this branch. #2007's ae4721f24 then keeps two ESA band cases off the legacy closure claim, ae2be5fbe merges that into #2017, and 1bda5418d merges that into this branch. Git reported no conflict in those merges; #2007's description covers its own. c536e7bd0 then merges main at d60944e9e into this branch and resolves its conflicts, and 7ff98b0b0 and e2376fed0 adjust two properties.

#2007 and #2017 land through this PR. #2007 now conflicts with main, and this branch has resolved those conflicts. #2017 charges an in-unit non-dependant's housing cost contribution, and this PR gives them their bedroom, so #2017 stays a draft and reaches main inside this PR. This PR's diff against main shows #2007's and #2017's changes too. #2017's branch carries b3e0d76b8, which updates a main CTR case for #2017's deduction (see Tests).

What the code does now

LHA_allowed_bedrooms (Universal Credit size criteria) gives a bedroom to each member of the benefit unit aged 16 or over who is not the claimant or partner:

  • a qualifying young person the renter is responsible for (is_child_or_qualifying_young_person_for_universal_credit), under UC Regs 2013 Sch 4 para 10(1)(b);
  • any other such member, as a non-dependant under para 10(1)(c) with para 9(2), unless they head the household. The formula reads is_benefit_unit_non_dependant_for_universal_credit for this, the variable Charge non-dependant deductions within the claimant's benefit unit #2017 adds and the one uc_individual_non_dep_deduction_eligible reads, so the bedroom and the housing cost contribution follow one definition.

uc_non_dep_deductions (from #2017) charges a housing cost contribution for each such non-dependant aged 21 or over who is not exempt (paras 13, 16), in their own family's claim if it makes one, and otherwise in the claim that uc_non_dependants_counted selects (para 9(2)(f)). The bedroom follows the same routing: an in-unit non-dependant of a family that makes no Universal Credit claim of its own also has a bedroom in the claim that counts the household's non-dependants. Where that claim is the non-dependant's own family (a family the model counts as the claim although benunit_is_rent_liable reads false, for example with no rent input), the family's own bedroom already covers them, and the formula adds none. So a joint tenant who claims, sharing with a pensioner head who does not, has 2 bedrooms and pays £1,158.60 a year for the head's son aged 30, as when the son has his own benefit unit; without that routing, the joint tenant would pay the contribution with 1 bedroom.

An adult son in the claimant's benefit unit now has a bedroom and bears the contribution. A claimant aged 45, renting privately at £10,400 a year in Maidstone in 2026, with a son aged 22 who is not in education and has no income, has 2 bedrooms (category C, whose £208.85 weekly rate exceeds the rent), a contribution of £96.55 a month (£1,158.60 a year), a housing costs element of £9,241.40 and Universal Credit of £14,340.20. Household net income comes to £14,260.20: the award, plus the £100 Household Energy Payment, less the £180 TV Licence. Coding the son, not claiming, in a benefit unit of his own gives the same bedrooms, contribution, award and household income.

A qualifying young person no one is responsible for (is_qualifying_young_person_for_universal_credit but not is_child_or_qualifying_young_person_for_universal_credit, so one looked after by a local authority) gets no bedroom. The formula applies this para 9(2)(g) exclusion both to the family's own members and to the household's non-dependants from other families, which count in the claim that uc_non_dependants_counted selects.

The exclusion sits in the UC formula, not in is_non_dependant_of_household_head, because that variable also feeds the Housing Benefit non-dependant rules (housing_benefit_has_non_dependant, housing_benefit_non_dep_deductions), where para 9(2)(g) does not apply.

The formula reads the household head (is_resolved_household_head), whose documentation describes the householder who owns or rents the accommodation in their name, as liable to make payments on a commercial basis for their occupation. A member who heads the household but does not claim then counts as neither a renter (paras 1(2) and 9(1)(a)) nor, under para 9(2)(d), a non-dependant, so the formula gives them no para 10(1)(c) bedroom, and uc_non_dep_deductions charges no contribution for them. A woman aged 45 who claims has 1 bedroom at 2025 if her son, aged 20, not in education and in her benefit unit, heads the household. Liability takes no one out of para 9(1)(b), so a head who is a qualifying young person the renter is responsible for stays in the extended benefit unit and keeps the para 10(1)(b) bedroom. The same woman has 2 bedrooms at 2025 if instead her daughter, aged 17 and in upper secondary education, heads the household. Members of other families never count the head as a non-dependant, because is_non_dependant_of_household_head excludes the head's family.

On main the formula counts only the renter or couple, non-dependants from other families, and children under 16. So a lone parent with a 17-year-old at college gets one bedroom (category B) instead of two (C). On main at 6c6e229, that household (rent £10,400 a year, Maidstone, 2026) has LHA_allowed_bedrooms 1 and a uc_housing_costs_element of £9,000; on this branch it has 2 bedrooms and £10,400.

The renter exemption (from #2017)

uc_non_dep_deductions_renter_exempt (UC Sch 4 para 15) 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). Para 1(2) makes the claimants the renters, so a partner who stays in the couple for capital and income but makes no claim brings no exemption. For para 15(2)(c) the formula reads uc_receives_attendance_allowance, reg 2's attendance allowance, which counts head (a), Attendance Allowance, and head (f), armed forces independence payment; the model holds no separate amount for heads (b), (d) and (e).

At 135b41ef8, a claimant aged 45 in Maidstone in 2026 heads the household and pays £10,400 of rent. Reg 3(3) excludes the partner, aged 43, and a son aged 22 shares their benefit unit, with no income and not in education. The model gives the claim 2 bedrooms (category C, whose £208.85 weekly rate exceeds the rent) and a claimant mask of [true, false, false]. With nobody blind, or with only the partner blind, DWP deducts £96.55 × 12 = £1,158.60 for the son, and Universal Credit comes to £5,098.80 + (£10,400 − £1,158.60) = £14,340.20. With the claimant blind, or receiving £5,000 of armed forces independence payment and no Attendance Allowance, the claim pays no contribution and Universal Credit comes to £15,498.80. #2017's head alone gives the son no room, 1 bedroom at the model's £9,000.00, and £12,940.20 with the contribution.

Housing Benefit needs no size-criteria change. housing_benefit_LHA_allowed_bedrooms on main already gives each couple or single adult among the occupiers one bedroom (the formula cites reg 13D(3)(zb) and (a)), and each other occupier aged 16 or over one bedroom under reg 13D(3)(b). That includes a member who heads the household but does not claim: Housing Benefit counts occupiers, not non-dependants (reg 13D(3)), and leaves out of them only "any joint tenant who is not a member of the claimant's household" (reg 13D(12)). The model records joint tenancy only for a whole family (liable_for_share_of_household_rent) and leaves such a family out of the claimant's occupiers. This PR adds HB cases that pin those counts. The HB and CTR non-dependant deductions come from #2017 and #2007; this PR's own code reads neither, and neither reads LHA_allowed_bedrooms.

The law

Universal Credit. Under UC Regs 2013 Sch 4 para 10(1), "A renter is entitled to one bedroom for each of the following categories of persons in their extended benefit unit":

  • (a) the renter (or joint renters);
  • (b) "a qualifying young person for whom the renter or either joint renter is responsible";
  • (c) "a non-dependant who is not a child";
  • (d)-(f) children.

Claimants to whom reg 26(2) applies count as "renters", and joint claimants as "joint renters" (para 1(2)). The extended benefit unit takes in the renter (or joint renters), any child or qualifying young person the renter is responsible for, and any non-dependant (para 9(1)). Anyone else who normally lives with the renter counts as a non-dependant, with exceptions (para 9(2)). Three matter here:

  • (d) "a person who is liable to make payments on a commercial basis in respect of the person's occupation of the accommodation (whether to the renter, joint renters or another person)";
  • (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", such as a young person looked after by a local authority (reg 4(6)). It applies across the whole extended benefit unit, so it also covers a looked-after young person in a non-dependant's family.

Under 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". The Secretary of State exempts a renter to whom para 15(2) applies, and each non-dependant on para 16's list, which includes "(a) a person who is under 21 years old".

Parliament defines a child as a person under 16 (WRA 2012 s.40), and the Secretary of State defines a qualifying young person in reg 5.

For the renter exemption, para 1(2) says: "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) includes "(a) a person who is ... blind" and "(c) a person in receipt of attendance allowance". Reg 2 defines "attendance allowance" by six heads, including "(a) an attendance allowance under section 64 of the Contributions and Benefits Act" and "(f) armed forces independence payment under the Armed Forces and Reserve Forces (Compensation Scheme) Order 2011". Under 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—" has not reached 18 and falls outside reg 8, lives outside Great Britain, serves as a prisoner, has no entitlement under reg 19, or falls within section 115 of the Immigration and Asylum Act 1999.

Housing Benefit. Under reg 13D(3) of the HB Regs 2006 and the HB (SPC) Regs 2006 (SI 2006/213, SI 2006/214), a claimant has "one bedroom for each of the following categories of occupier", including "(a) a couple" and "(b) a person who is not a child". "Occupiers" takes in the persons who occupy the dwelling as their home, "except for any joint tenant who is not a member of the claimant's household" (reg 13D(12)).

Invariants

The Hypothesis properties in policyengine_uk/tests/test_lha_bedroom_young_people_properties.py each run 25 derandomized examples over populations of up to 4 households (up to 3 for properties 5 and 6), with sharers, boarders, lodgers and non-dependant families. On some draws the generator makes the person it adds to the head's family the household head in place of that family's first adult, who stays the claimant. Properties 5 and 6 also draw whether each family would claim Universal Credit.

  1. Monotonicity. Adding a person aged 16 to 19 to any family never lowers any family's UC or HB bedrooms, whether the test supplies the claimant and partner or the model infers them.

  2. Exact effect. When the added person is not the claimant or partner, only these changes happen:

    • their family gains one HB bedroom, and one UC bedroom unless they are a qualifying young person no one is responsible for, or they head the household and are not a qualifying young person;
    • if they join a non-dependant's family, the claim counting the household's non-dependants gains one UC bedroom (with the same exception), and every family liable for the rent gains one HB bedroom;
    • if they are an in-unit non-dependant of a family that makes no UC claim of its own, the claim counting the household's non-dependants gains one UC bedroom;
    • if they join a boarder's or lodger's family, every family liable for the rent gains one HB bedroom.

    Two explicit @examples add a qualifying young person a local authority looks after (aged 17, in upper secondary education, started at 16, before the terminal date), one to a single renter's family and one to a non-dependant's family, so the property always checks the para 9(2)(g) exclusion in both places.

  3. Reference agreement. Every family's bedrooms equal an independent count of the size criteria under both schemes, including the routing in 2. Children's rooms are the fewest that hold them two to a room (same sex, or both under 10), found by brute force, pooled across the HB occupiers.

  4. In-unit non-dependants have a bedroom. Every benefit-unit member aged 16 or over who is not the claimant, partner, a UC qualifying young person or the household head (is_resolved_household_head, whom the formula reads as liable, and so not a non-dependant under para 9(2)(d)) counts as a non-dependant with a bedroom. The test computes that set from age, is_claimant_or_partner, is_qualifying_young_person_for_universal_credit and is_resolved_household_head, and asserts that is_benefit_unit_non_dependant_for_universal_credit, which the formula reads, marks the same people. The bedroom goes to their family, and also to the claim counting the household's non-dependants where their family makes no claim and is not that claim. Making every such member a qualifying young person the renter is responsible for leaves every family's LHA_allowed_bedrooms unchanged, except that the counting claim loses the bedroom of one whose family makes no claim: another family's qualifying young person is not that renter's non-dependant (para 9(2)(g)).

  5. Rooms and contributions. Nobody owes a housing cost contribution without being a non-dependant. When the test adds an adult aged 16 to 64, not in education, with or without Attendance Allowance, to any family as an in-unit non-dependant, they owe a contribution unless aged under 21 or receiving Attendance Allowance (para 16(2)). The claim that bears it (their own family's if it makes a claim, otherwise the counting claim) gains that contribution unless its renter is exempt under para 15, and gains one bedroom; no other family's contributions change.

  6. Coding. Moving such an adult, not claiming, between a family and a benefit unit of their own leaves every claiming family's UC bedrooms, contributions and award unchanged.

test_uc_renter_exemption_properties.py (from #2017) checks two more, with 10 derandomized examples each over 8 households of a renting claimant aged 18 to 64, a partner whom uc_is_ineligible_partner flags, an adult son in their benefit unit and an adult in a non-claiming family of their own:

  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-dependant deductions or para 15 flag.
  2. The claimant's armed forces independence payment exempts the claim. Giving the single claimant any positive armed forces independence payment always exempts the claim and removes its non-dependant deductions.

The formula computes a fixed expression of its inputs, with no randomness, so it gives the same result for the same inputs.

Tests

  • LHA_young_person_bedroom.yaml, 14 cases:

    • qualifying young people 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, a boy of 12 and a girl of 8 (4 bedrooms, E);
    • a partner aged 19 (no extra bedroom);
    • a pension-age couple's grandchild at college under HB (SPC);
    • a looked-after young person in a non-dependant's family (adds no UC bedroom for the household head);
    • a non-dependant couple (UC 3 bedrooms, HB 2);
    • a claimant aged 45 whose son aged 20, in her benefit unit, heads the household (UC 1 bedroom, B, at 2025);
    • a claimant aged 45 whose daughter aged 17, a qualifying young person in her benefit unit, heads the household (UC 2 bedrooms, C, and HB 2 bedrooms, C, at 2025);
    • the adult son aged 22 in the claimant's benefit unit, through universal_credit (£14,340.20) and household_net_income (£14,260.20), with the arithmetic in the comments;
    • the same son in a benefit unit of his own, not claiming: the same figures;
    • a pensioner head's son aged 30, in her benefit unit, counted in a claiming joint tenant's claim: 2 bedrooms and a £1,158.60 contribution.

    The £ expectations use a rent of £200 a week, between the model's Maidstone one-bedroom (B, £173.08 a week) and two-bedroom (C, £208.85 a week) rates, the same in 2025 and 2026.

  • uc_non_dep_deductions_renter_exempt.yaml (from Charge non-dependant deductions within the claimant's benefit unit #2017), six cases through universal_credit and household_net_income in the household above, each with 2 bedrooms, category C, at 135b41ef8:

    • reg 3(3) excludes the partner, who alone is blind: no exemption, £1,158.60 contribution, UC £14,340.20, household net income £14,350.20;
    • the claimant blind: exempt, UC £15,498.80;
    • a joint claim, both members eligible, with the partner blind: exempt, UC £8,003.64 + £10,400 = £18,403.64;
    • nobody blind: £1,158.60 contribution, two bedrooms, UC £14,340.20 (Charge non-dependant deductions within the claimant's benefit unit #2017's head alone gives £12,940.20);
    • the single claimant receives £5,000 of armed forces independence payment and no Attendance Allowance: exempt, UC £15,498.80;
    • only the excluded partner receives it: £1,158.60 contribution, UC £14,340.20.

    Household net income adds the £100 Household Energy Payment and takes off the £180 TV Licence, which the model halves 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.

  • test_lha_bedroom_young_people_properties.py, property 5's test: main added UC reg 5(1)(a), under which a 16-year-old outside education counts as a qualifying young person before the 1 September after their 16th birthday. Without 135b41ef8 the test, which assumed the added member never qualifies, fails on a 16-year-old added to a household headed by a 20-year-old; that commit reads is_qualifying_young_person_for_universal_credit for the added member, and the file reports 6 passed.

  • LHA_claimant_composition.yaml: two cases, a 17-year-old apprentice non-dependant and an 18-year-old qualifying young person, now assert UC category C (para 10(1)(c) and (b)) beside main's HB category C.

  • Against d8c2249 (with fa6ddae's YAML, less the one output that names Charge non-dependant deductions within the claimant's benefit unit #2017's variable): the adult son's case fails (uc_non_dep_deductions 0, expected £1,158.60), and so does the joint tenant's (uc_non_dep_deductions 0 for the joint tenant, expected £1,158.60); the other 12 cases pass.

  • Against main (6c6e229, with d8c2249's test files copied in; the YAML gives the same result at 0080274): 8 of the 28 cases in the two YAML files then failed, all on the UC bedroom count or category. Three of the first four properties failed (exact effect, reference agreement, in-unit non-dependants).

  • Mutations at e700316 (the same model code as d8c2249) of LHA_allowed_bedrooms, each run against the two YAML files (28 cases) and the first four properties:

    • Dropping the para 10(1)(c) family term (family_rooms = benunit.sum(qualifying_young_person)) failed two YAML cases (A member aged 18 who is not a qualifying young person is a non-dependant with a bedroom and A 17-year-old apprentice in the renter's benefit unit is a non-dependant) and properties 2, 3 and 4.
    • Dropping the para 9(2)(g) exclusion on other families' non-dependants (& ~no_one_responsible) failed one YAML case (A qualifying young person no one is responsible for in a non-dependant's family adds no Universal Credit bedroom) and property 2.
    • Dropping both the in-family para 9(2)(g) exclusion and the head exclusion (family_non_dependant = family_member) failed three YAML cases and properties 2 and 3.
    • Dropping only the head exclusion (family_non_dependant = family_member & ~qualifying) failed one YAML case (A member who heads the household but does not claim adds no Universal Credit bedroom) and properties 2 and 3.
    • Taking the para 10(1)(b) bedroom from a head who is a qualifying young person failed one YAML case and property 2.
  • Mutations at 50e2e44, each run against LHA_young_person_bedroom.yaml, LHA_claimant_composition.yaml and benefit_unit_non_dependants.yaml (76 cases; 2d362d2 changes only the property file). The first four ran against the six properties at fa6ddae, whose model differs only by the guard the sixth mutation drops; the last two ran against the six properties at 2d362d2.

    • Dropping the household-head exclusion from is_benefit_unit_non_dependant_for_universal_credit, which the bedroom now reads (& ~household_head): killed. It fails two YAML cases (A member who heads the household but does not claim adds no Universal Credit bedroom and UC and HB, a head who applies for CTR alone is not her benefit unit's non-dependant) and properties 2, 3 and 4.
    • Removing is_benefit_unit_non_dependant_for_universal_credit from the UC gate (uc_individual_non_dep_deduction_eligible reads only is_non_dependant_of_household_head): killed. It fails 10 YAML cases, among them An adult son in the renter's benefit unit has a bedroom and bears a housing cost contribution and A claiming joint tenant has the bedroom of the non-claiming head's adult son whose contribution it bears, and property 5.
    • Removing is_benefit_unit_non_dependant_for_legacy_benefits from the HB gate (housing_benefit_individual_non_dep_deduction_eligible): killed. It fails 8 HB cases in benefit_unit_non_dependants.yaml and test_benefit_unit_non_dependant_properties.py::test_deductions_match_the_oracle. The six properties here pass, as they check UC only.
    • Removing the in-unit term from the CTR gate (council_tax_reduction_individual_non_dep_deduction_eligible returns age >= 18 & other_family): killed. It fails 3 CTR cases in benefit_unit_non_dependants.yaml and test_deductions_match_the_oracle. The six properties here pass.
    • Dropping the passed-on bedroom (person.household.sum(non_dependant) without | passed_on): killed. It fails one YAML case (A claiming joint tenant has the bedroom of the non-claiming head's adult son whose contribution it bears) and properties 2, 3 and 5.
    • Dropping the guard for a family that is itself the counting claim (~benunit.project(own_claim) without | counted): killed. It fails one YAML case (A 17-year-old apprentice in the renter's benefit unit is a non-dependant, UC category D instead of C) and none of the six properties, whose generator always sets a rent, so no family is the counting claim without being liable for the rent.
  • council_tax_reduction_prescribed_benefits.yaml: main's case Where a household head applies alone, her own IIDB counts with her State Pension, and the father's does not predates Charge non-dependant deductions within the claimant's benefit unit #2017 and expected no deduction for the couple in her benefit unit. Under Charge non-dependant deductions within the claimant's benefit unit #2017 they are her non-dependants, one deduction of £5.20 a week (£270.40 a year), so the case now expects council_tax_reduction_non_dep_deductions £270.40 and council_tax_benefit £1,195.968 (1,466.368 − 270.40). It fails at 9c6a994 without that change and passes with it.

  • test_benefit_cap_lha_scheme_split_properties.py: main added an example of a lone parent with a 19-year-old in full-time education who is past UC's terminal date, and asserted that the UC and HB bedroom counts differ. Under para 10(1)(c) that young person counts as a non-dependant with a UC bedroom, so the test now asserts 2 bedrooms under each scheme. Invariant 3's docstring now says where the two counts still differ: a qualifying young person a local authority looks after, and other occupiers' children.

  • Mutations at 135b41ef8, 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 fails the excluded partner's blindness and armed forces independence payment cases and invariant 7; putting attendance_allowance > 0 back fails the single claimant's armed forces independence payment case and invariant 8. Both mutants die, as at Charge non-dependant deductions within the claimant's benefit unit #2017's head d2faa3bc9.

  • At 135b41ef842e87947da3e8ec0fdb13e2648cbd23, locally with no survey data, each run under -n 4:

    • policyengine-core test on finance/benefit/family 1,878 passed, gov/dwp 968 passed and gov/local_authorities/council_tax_reduction 391 passed, none failing;
    • test_lha_bedroom_young_people_properties.py 6 passed; 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 other property files ran on a build of this head whose tree differs only in the three test files 6900b88b7, d2faa3bc9 and 135b41ef8 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.
  • At 2d362d2 (the YAML and the model code match 50e2e44, where the YAML ran):

    • policyengine-core test on finance/benefit/family (1,840 passed), gov/dwp (806 passed) and gov/local_authorities/council_tax_reduction (376 passed), none failing;
    • test_lha_bedroom_young_people_properties.py 6 passed; test_benefit_unit_non_dependant_properties.py 3 passed, test_council_tax_reduction_claimant_properties.py 3 passed and test_household_head_agreement_properties.py 3 passed (at 50e2e44, the same model); policyengine_uk/tests/code_health 3,110 passed;
    • ruff format --check, ruff check, ruff check --select F811,F821 policyengine_uk and git diff --check d8c224979..HEAD clean; .github/check_fix_pr.py passes on this title and body.

Open reading: a lodger's adult son

Where a lodger's non-paying adult son sits in the lodger's own benefit unit and the lodger claims Housing Benefit, the model charges the householder and the lodger one full deduction each. I found no decision on this under HB reg 74(5), and the regulations don't define "joint occupier". This comment sets out the sources on each side. Apportioning between them, or following C1 para 1.185's wider exclusion, takes one deduction off the two claims: £20.40 to £131.45 a week in 2026-27.

Impact

CI's Aggregate impact report for 1bda5418d, this PR's head on 5 November (run 42049553084), compared main e3765cb61 with 2f07e5125, its merge of that revision into that main, on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.1), a full microsimulation for each side and year. The report counts #2007 and #2017, which that revision contains. It broke no check and flagged 53 moves, among them Universal Credit spending in every year and child poverty.

We estimate that Universal Credit spending rises by £224.2m in 2025-26, £246.9m in 2026-27, £261.3m in 2027-28, £274.6m in 2028-29, £287.0m in 2029-30, £300.7m in 2030-31 and £313.0m in 2031-32. Household net income rises by £246.4m, £264.6m, £279.7m, £293.9m, £307.8m, £322.6m and £334.8m in those years. Each year 0.8% of people gain over £1, and 0.0% lose over £1. Absolute child poverty before housing costs falls by 0.05 points (7,100 children) in 2025-26, 0.24 points (35,500) in 2026-27, and 0.22 to 0.23 points (33,000 to 33,900) in each later year.

#2007's own report at ae4721f24 moves Housing Benefit and Council Tax Reduction and leaves Universal Credit alone, so the Universal Credit rise comes from #2017 and this PR. For #2017 at 89beee8 (base #2007 at 0b6c3db), we estimate that Universal Credit paid rises by £59.9m in 2026, all from the para 15 renter exemption.

Known gaps (other PRs)

🤖 Generated with Claude Code

MaxGhenis and others added 3 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 and others added 5 commits October 2, 2026 02:30
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>
…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>
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>
Review r3:
- R3-6: in_other_non_liable_family's docstring stated the proxy as if it
  were reg 9(2)(a), (d)-(e). It is a proxy: a family jointly liable for the
  council tax but paying no rent is wrongly included, which #2009's
  claimant-family test fixes.
- R3-3: an in-unit non-dependant's own benefit awards are not modelled, so
  the HB reg 74(8) and CTR Sch 1 para 8(8) exemptions for a non-dependant on
  an income-related benefit or on UC with no earned income never apply to
  them. The documentation of is_benefit_unit_non_dependant_for_legacy_benefits
  now says so.

No change in behaviour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 2, 2026 08:28
…milies; one HB bedroom for an occupier couple

Review findings on #2010:

- UC Sch 4 para 9(2)(g) applies to the whole extended benefit unit, so a
  qualifying young person no one is responsible for (reg 4(6)) in a
  non-dependant's family adds no bedroom for the household head.
- HB reg 13D(3)(a): an ordinary occupier couple outside the claimant's family
  shares one bedroom (DWP circular HB A3/2017); only non-couple occupiers
  aged 16 or over take one each under (b).

The property oracles encoded both errors as law; they now count the law, and
two YAML cases pin the cross-family results.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Take #2006's housing_benefit_LHA_allowed_bedrooms.py whole: its rewrite over
the claim's occupiers already gives the benefit unit's own members aged 16 or
over a bedroom (reg 13D(3)(b)) and an occupier couple one bedroom (13D(3)(a)),
so #2010's HB change is dropped and its HB YAML cases stay as tests.

Keep #2010's UC change on top of #2006's LHA_allowed_bedrooms.py: the family
term (para 10(1)(b), (c)) and the para 9(2)(g) exclusion on the non-dependant
count, which now goes to uc_non_dependants_counted's claim. The exclusion
stays in the UC formula, not in is_non_dependant_of_household_head, because
that variable also feeds HB and CTR, where para 9(2)(g) does not apply.

The property oracles follow #2006's claim rules: UC non-dependants count in
the uc_non_dependants_counted claim, and every family liable for the rent
counts the HB occupiers, with their children pooled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 8 commits October 2, 2026 23:00
Housing Benefit (SI 2006/213 reg 74; SI 2006/214 reg 55):
- bands include their lower edge, and only a non-dependant in remunerative
  work (16+ hours, reg 6(1)) is banded, on the couple's joint income; anyone
  else pays the reg 74(1)(b) amount;
- one deduction per couple, the higher (reg 74(3));
- no deduction for full-time students, State Pension Credit recipients, or
  under-25s on IS, income-based JSA or UC without earned income
  (reg 74(7), (8), (10)), nor for any non-dependant when the claimant or
  partner is blind or on AA, DLA care, PIP daily living or AFIP (reg 74(6)).

Council Tax Reduction (SI 2012/2885 Sch 1 para 8; WSI 2013/3029 Sch 1
para 3 and Sch 6 para 5; SSI 2012/319 reg 48; SSI 2012/303 reg 67 and
SSI 2021/249 reg 90):
- each national scheme's own weekly scale for 2013-14 to 2026-27, instead
  of the Housing Benefit amounts;
- the same banding and couple rules, with Wales's working-age exception for
  couples on UC;
- the schemes' any-age exemptions, the UC limb from the year each scheme
  added it, and the existing applicant exemption.

Fixes #2004; the non-dependant half of #1934.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, gross income

- Identify the claimant or partner as the benefit unit's head or any member
  who is not an SSCBA s.142 child or qualifying young person (HB Regs 2006
  regs 2(1) and 19; CTR regs 2(1)), replacing is_adult in the HB and CTR
  claimant exemptions.
- Band a couple on the couple's joint income only, give the couple one
  deduction and any other adult in the family their own, and count benefit
  receipt (IS, JSA(IB), ESA(IR), SPC, UC) only for the award's claimant or
  partner.
- Treat a non-dependant on IS, JSA(IB) or ESA(IR) as not in remunerative work
  for HB (reg 6(6)).
- Take self-employed losses as nil in the UC no-earned-income test
  (UC reg 57(2)).
- Add the family's UC (before the cap), tax credits and child benefit to gross
  income.
- Tests: the review's counterexamples, a non-vacuous SPC exemption case, and
  property-test generators and oracles for dependent young people and losses.

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

- "No earned income" follows UC Regs 2013 regs 52-62: employment income plus
  SSP and SMP less relievable pension contributions (reg 55(4)-(5)),
  self-employed earnings with losses nil and the minimum income floor where
  the UC model applies it (regs 57(2), 62), and other paid work.
- IS, JSA(IB), ESA(IR) and SPC count only for the person they are payable to
  (HB Regs 2006 reg 2(3)-(3A)): the member reporting the award, or the head;
  used for the exemptions and HB reg 6(6). UC still counts for both joint
  claimants.
- Gross income uses UC after the benefit cap (UC reg 81), applying the cap to
  the capped benefits other than HB, which a non-dependant family does not
  receive.
- CTR exempts an adult for whom another person is entitled to child benefit
  (LGFA 1992 Sch 1 para 3, via para 8(8)(b) and equivalents).
- Tests: the review's counterexamples, and property oracles for the payee and
  the child benefit disregard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replaces the local claimant-or-partner helper (benefit unit head, or anyone
not a child benefit child or qualifying young person) with the
is_claimant_or_partner variable: the SSCBA s.137 couple, at most two people.
A partner at school is now a partner, and a third adult in a benefit unit is
deducted separately. Adds the round-2 review cases: a blind 16-year-old
partner (Wales), a non-dependant couple with a partner at school, and a
17-year-old partner's PIP in Merton.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The changelog and the property generator's comment now name
is_claimant_or_partner instead of the SSCBA s.142 definitions, and
is_award_payee says that both members of a joint-claim jobseeker's allowance
couple are on it (HB reg 2(3)(c)), which the model cannot identify.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ap childcare, child benefit claims

- Gross income adds statutory sick, maternity and paternity pay (earnings,
  HB reg 35(1)(i)) and Maternity Allowance to each person's taxable income,
  and the family's IS, JSA(IB), ESA(IR) and Pension Credit to a couple's.
- Earned income for the UC limb adds statutory paternity pay (UC reg
  55(4)(c)), and relievable pension contributions come off self-employed
  earnings when there are no employed earnings (reg 57(2), step 4).
- Scotland's working-age scheme exempts a non-dependant whose partner is on
  IS, JSA(IB) or ESA(IR) and who is not on Universal Credit, from April 2022
  (SSI 2021/249 reg 90(8)(a), reg 4(1)).
- The after-cap UC in gross income keeps the cap's childcare protection (UC
  reg 81(1)-(2)).
- The LGFA 1992 Sch 1 para 3 disregard needs a child benefit claim.
- The property oracle derives the claimant and applicant exemptions from
  the generated inputs, and the generator varies statutory pay, pension
  contributions, the start-up period, the award's reporter and child
  benefit claims.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Takes main's uv.lock, which drops an unintended one-line lock change from
this branch's first commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 3 commits November 5, 2026 08:06
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 56de9a6932317724a4c9a31eb10fc70256483d6c. C1, C2, C3 and A1 remain resolved; one new test-fixture finding remains.

A2 — Keep the ESA recipient fixture off the automatic migration claim. In non_dependant_deduction_review_cases.yaml, lines 323–336, “Income-related ESA is payable to the recipient, not the working partner” sets would_claim_uc: false but leaves would_claim_uc_at_legacy_closure at its default. After the integrated ESA abolition, the case claims UC £1,997.64. Its HB/CTR deductions become £3,346.20/£551.20, while the fixture still expects £2,436.20/£270.40. A minimal external copy changing only would_claim_uc_at_legacy_closure: false gives UC £0 and restores both expected deductions. Please explicitly decline that migration claim if the case is intended to isolate the held ESA award. This finding concerns the stale integration fixture; it does not establish a wrong statutory payment.

Current validation: 121 YAML cases passed, one failed, plus two native final-result cases passed. The corrected causal-control copy above is recorded separately. The prior 42 checks were retained rather than added to those counts. The current combined tree contains #2017 at 109fe2d; its excluded-partner blind case still yields two bedrooms, UC £14,340.20 and household net income £14,350.20. Source/queue checks are complete. Approval is withheld while A2 remains open.

MaxGhenis and others added 3 commits November 5, 2026 09:52
esa_income_abolition_reached moves a couple reporting income-related ESA to
Universal Credit in 2026, and the award moves the working partner's band. These
cases test how income-related ESA counts in the band, so the couples stay on it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 1bda5418d591c63c9e9c93d29d9f6ff91c97988c. C1, C2, C3, A1 and A2 are resolved; no open findings or material evidence gaps remain.

A2 is fixed by explicitly setting would_claim_uc_at_legacy_closure: false alongside the ordinary no-claim preference in both held-ESA recipient fixtures. The changed YAML file passed 32 current cases, with no failures or skips. The previously failing recipient case now produces the expected HB/CTR deductions of £2,436.20/£270.40. Production formulas, dependencies and lock inputs are unchanged from the completed review. The earlier 121 passes, one stale-fixture failure and two native cases remain separate historical evidence.

Current #2010 contains current #2017 at ae2be5f; the retained combined bedroom/contribution final-result proof remains applicable. Source/queue records were rechecked with 35 source pairs hash-validated. No model or broad test suite was repeated beyond the changed fixture file.

This completed review is retained pending applicable exact-head hosted checks. Approval can be considered after they clear without repeating the code/source review. #2017's explicit standalone-delivery restriction remains intact.

@MaxGhenis
MaxGhenis requested a review from juaristi22 November 5, 2026 16:22
juaristi22
juaristi22 previously approved these changes Nov 5, 2026

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

Approving unchanged current head 1bda5418d591c63c9e9c93d29d9f6ff91c97988c. Review COMPLETE; C1, C2, C3, A1 and A2 remain resolved, with no findings or material evidence gaps.

The retained code/source evidence, corrected ESA fixtures and current combined-delivery scope remain applicable. The prior 32-case fixture run is retained; no code tests or model calculations were repeated. The updated aggregate claims were checked against the current CI report and its head/base/dataset provenance, and all 35 retained source pairs and actual source-queue records were revalidated.

Readiness, human feedback, current head/description, source guards and applicable required checks were refreshed immediately before approval; all latest exact-head checks pass. This approval applies to the combined #2010 delivery. #2017's restriction against standalone approval remains intact.

@juaristi22
juaristi22 added this pull request to the merge queue Nov 6, 2026
@juaristi22
juaristi22 removed this pull request from the merge queue due to a manual request Nov 6, 2026
MaxGhenis added a commit that referenced this pull request Nov 6, 2026
…n-level lodgers

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

Copy link
Copy Markdown
Collaborator Author

I merged main into this at c536e7bd0, now that #2002 has landed. #2002 moves the boarder and lodger test to the person, and this pull request adds non-dependants inside a benefit unit, so the merge settles four readings beyond the text conflicts:

  • An in-unit adult counts in their own family's UC claim if it makes one, and otherwise in the claim that counts the household's other non-dependants. UC Sch 4 para 9(2)(f) sets no order, so the model chooses this one.
  • A lodger bears their own adult son in full, as the householder does. HB reg 3(2)(e)(i) excludes only the person liable to pay, and I read reg 3(2)(d) as keeping lodger and householder out of reg 74(5)'s apportionment.
  • A family's Pension Credit exempts its claimant or partner and not an adult son (Sch 4 para 16(2)(b); HB reg 74(10)).
  • A member who pays the householder counts in none of the three in-unit flags.

I restated boarders_and_lodgers_non_dependants.yaml and test_benefit_unit_non_dependant_properties.py on those readings and added one case, a lodger's own claim counting the son. This pull request also gives each national scheme its own deduction scale, so the son's Council Tax Reduction deduction in #2002's Scottish case falls from 3,346.20 to 569.40 a year: at 300 a week, Scotland's band from 286 takes 10.95 a week.

I'll ask you to look again when CI passes at this head.

#2002 says a non-paying adult counts the same in or out of the payer's unit.
#2007 exempts an adult on their own family's Universal Credit with no earned
income, and the model reads no award for an adult in another family's unit, so
the adult's own family forgoes Universal Credit in this comparison.

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

Copy link
Copy Markdown
Collaborator Author

I pushed 7ff98b0b0 on top of the merge, which restarts CI. #2002's test_a_non_paying_adult_counts_the_same_in_or_out_of_the_payers_unit fails with #2007's exemptions on the tree: an adult of 57 with no earnings bears a 270.40 Council Tax Reduction deduction inside the payer's unit and none in a family of their own. #2007 exempts that adult for their own family's Universal Credit, and the model reads no award inside another family's unit, so the adult's own family now forgoes Universal Credit in the comparison and invariant 10 says so.

I found this in a batch run at 76392628b rather than at this head, so CI here should confirm it. I'll ask you to look again when CI passes.

#2845's first-day education test reads
housing_benefit_report_is_rate_rebate_only, so the cycle test now allows any
housing_benefit_report variable. #2301 makes a 16-year-old outside education a
Child Benefit qualifying young person, and that Child Benefit lowers a capped
family's Universal Credit, so invariant 6 now covers people aged 20 or over.
Both properties hold with or without those pull requests on the tree.

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

Copy link
Copy Markdown
Collaborator Author

I pushed e2376fed0 for two more clashes from the same batch run. Neither changes the model:

Both properties hold with or without #2845 and #2301 on the tree, so they don't depend on the order those land in.

MaxGhenis added a commit that referenced this pull request Nov 6, 2026
…n-level lodgers

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 at e2376fed08ffa9dc19314531ed735eecd7bd4c3e: PARTIAL, one nonblocking wording finding and one material source-interpretation gap. Prior C1, C2, C3, A1 and A2 remain resolved.

HB_APPORTIONMENT — Establish the lodger-son deduction denominator. The current person-level payer/in-unit composition and the new lodger-own-claim case apply a full Housing Benefit deduction for the lodger's non-paying adult son. The payer exclusions in HB reg. 3(2)(d)/(e) do not establish whether that son is a non-dependant of multiple joint occupiers for reg. 74(5). DWP guidance, physical page 23 restates apportionment for multiple joint occupiers and a full deduction for one; the material landlord/lodger denominator premise remains unverified. Please provide authoritative support or a qualified, source-backed explanation of that assessment unit. This is an evidence gap, not a confirmed wrong-cash finding.

A3 — Bind the impact estimate to the scored head. The Impact paragraph calls run42049553084/synthetic merge2f07e5125 a merge of “this head,” but its verified provenance is the earlier 1bda5418 revision. Please date/name that scored revision and retain the figures as historical evidence, or supply a current-head score. The figures have not been shown numerically wrong; the current attribution is unsupported after the meaningful merge changes.

60 current tests passed (48 YAML, 12 Python), with no failures/skips. They exercise final UC/HB/CTR paths; the full lodger-son HB amounts remain conditional on the unresolved legal denominator. All nine feature parameter files are unchanged, and all 38 source originals/extracts passed integrity checks. No additional population simulation was run. Current-head CI is pending.

Approval is held for the source gap and wording finding. The earlier approval covered 1bda5418; the changed merged scope is not covered by a current approval. PR2016's unchanged child head still awaits actual integration of this parent head, and PR2017 remains combined-delivery-only.

@juaristi22
juaristi22 dismissed stale reviews from themself November 6, 2026 14:34

Superseded for current readiness by #2010 (review) . These approvals covered earlier captured heads; the changed merged scope has an unresolved HB apportionment source premise and impact-attribution wording finding. Approval is withheld for the current head.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

HB_APPORTIONMENT

I found no decision on a householder and lodger under reg 74(5), and the regulations don't define "joint occupier", so the model's reading stays a qualified one. DWP's manuals point towards it, and one C1 passage points against part of it.

I read a lodger as outside reg 74(5)'s joint occupiers for three reasons:

  • Reg 74(5) apportions by the number of joint occupiers and each one's share of the payments, the factors reg 12(5) uses for rent. A4 para 4.1920 describes joint occupiers for reg 12 widely, as people in one home who each carry separate liability, but para 4.1921 then divides "the rent" between them. C1 para 1.205 counts a sub-tenant's payment as the claimant's income, so the householder's rent and the lodger's charge have no common total to divide.
  • C1 para 1.185 and the LHA manual's glossary (p10) list a joint occupier apart from a sub-tenant. C1 para 1.203 defines a tenant or sub-tenant as someone other than a "joint tenant/owner", and LHA para 2.110 ties reg 74(5) to joint tenants.
  • The 1987 regulations gave the two separate limbs in reg 3(2): (d) a person who jointly occupies the dwelling, (e) a person liable to pay the claimant. England's prescribed CTR scheme (SI 2012/2885 Sch 1 para 8(5)) limits the same split to residents with joint and several liability.

C1 para 1.185 (p19) also excludes any person, or a member of that person's household, who makes or receives commercial payments to or from the claimant. Reg 3(2)(e)(iii) reaches only the household of the person the claimant pays. A council following C1 would charge the householder nothing for the son. The model follows the regulation here, as main has since #2002.

The reading rests on structure and on 2009 and 2014 guidance, with no holding behind it. Reg 3(2)(d)'s "jointly occupies… and is either" can also read wider than co-owners and co-liable occupiers. A split, or C1's reading, takes one deduction off the two claims: £20.40 to £131.45 a week in 2026-27. The double charge arises only where the son sits in the lodger's own benefit unit and the lodger claims. A son in his own benefit unit costs the householder the whole deduction and the lodger nothing.

My next push puts this reading and these sources in the variable's documentation and references, and the description now lists it as an open reading.

A3

The Impact section now names 1bda5418d as the scored revision and dates its run. I'll replace those figures with this head's report when run 42230879312 finishes.

I also corrected the merge order. #2007 now conflicts with main and this branch has resolved those conflicts, so #2007 and #2017 land through this PR.

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

Review status: PARTIAL — REQUEST_CHANGES
Reviewed head: e2376fed08ffa9dc19314531ed735eecd7bd4c3e

C4 — Fix the intended family roles or oracle in the ESA-passport property. The required Python 7/7 job fails test_council_tax_reduction_devolved_working_age_properties.py::test_income_related_esa_passports_to_the_full_liability at line 177. Its Scottish 32/52-year-old fixture omits explicit couple roles: the older adult becomes claimant and the younger a non-dependant. The passport flag is true, but a £288.60 deduction gives £211.40 CTR against the unconditional £500 oracle. The recorded case reproduces on the raw PR head; setting the intended claimant/partner roles explicitly makes the same property body pass. Please repair the generated household roles or account for actual non-dependants, then obtain passing required CI.

A3 is resolved: the description now dates the old 1bda5418d impact comparison. The new A4/C1/LHA/regulation 12 evidence strengthens the documented argument but leaves HB_APPORTIONMENT unverified for the householder/lodger/adult-son full-versus-apportioned deduction. The qualified interpretation remains a material evidence gap.

Prior C1/C2/C3/A1/A2 remain resolved. Validation reused the unchanged review and added one 8.224-second diagnostic campaign with an expected failing recorded case and passing role control; these are diagnostic calls, not a newly passed generated test suite. Hosted checkout was synthetic merge 7c2d70eb72; the local reproduction used the raw reviewed head.

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.

Give benefit-unit members aged 16 or over a bedroom in the LHA size criteria

3 participants