Skip to content

Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria - #2016

Open
MaxGhenis wants to merge 22 commits into
mainfrom
lha-nondep-children-foster-rooms
Open

MaxGhenis wants to merge 22 commits into
mainfrom
lha-nondep-children-foster-rooms

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2011
Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_other_families_children_and_additional_bedrooms.yaml::A non-dependant's foster child raises the renter's final Housing Benefit

axiom: uk/regulations/uksi/2013/376/schedule/4/paragraph/10 (UC Sch 4 para 10(1)(d)-(f), (3)(b)) encoded-correct, companion cases in TheAxiomFoundation/rulespec-uk#412 | UC Sch 4 para 9(2)(c), (g) (non-dependants' children, foster children): TheAxiomFoundation/rulespec-uk#406 queued (addendum: TheAxiomFoundation/rulespec-uk#406 (comment); extension: TheAxiomFoundation/rulespec-uk#406 (comment)) | UC Sch 4 paras 12 and 29(5), (9A), with reg 2 and reg 89(3)(a) "adopter": TheAxiomFoundation/rulespec-uk#411 queued (extension: TheAxiomFoundation/rulespec-uk#411 (comment)) | HB Regs 2006 / HB (SPC) Regs 2006 regs 2(1), 13D(3)(c)-(e), (3A)-(3B), (12), 21(3): TheAxiomFoundation/rulespec-uk#406 and #357 queued (addenda: TheAxiomFoundation/rulespec-uk#406 (comment), TheAxiomFoundation/rulespec-uk#357 (comment); extension: TheAxiomFoundation/rulespec-uk#406 (comment))

Problem

The model's LHA size criteria had four gaps:

  1. Other families' children. bedrooms_for_children counted only the claimant's own benefit unit, so a grandchild living with their parent in the renter's home never had a room. Under Housing Benefit, neither did a boarder's or lodger's child.
  2. Foster children. The model gave them a bedroom of their own and gave the foster parent no additional bedroom. lha_renter_has_non_dependant also counted a foster child under 16 as a non-dependant, which took a single foster parent under 35 out of the shared accommodation rate for the wrong reason.
  3. Overnight care. The model gave no additional bedroom for non-resident overnight carers.
  4. The shared accommodation rate's non-dependants. The claim that counts the household's non-dependants got a bedroom, and bore a housing cost contribution, for an in-unit non-dependant of a family that neither claims nor counts them. lha_renter_has_non_dependant didn't count that person, so a single renter under 35 kept the shared accommodation rate, which UC Sch 4 para 28(4) rules out for a renter with a non-dependant.

The law, and how DWP applies it

We read the provisions on legislation.gov.uk on 2026-10-01, and reg 2 and reg 89(3)(a) of the UC Regs 2013 and HB reg 21(3) again on 2026-11-02.

Universal Credit (UC Regs 2013 Sch 4):

  • In para 9(1), the Secretary of State defines the extended benefit unit as the renter, the children and qualifying young persons they are responsible for, and "any person who is a non-dependant".
  • Anyone who normally lives with the renter counts as a non-dependant, with seven exceptions in para 9(2). Three matter here:
    • (c): the renter's foster child;
    • (d): a person liable on a commercial basis, such as a lodger or joint tenant;
    • (g): "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible".
  • A non-dependant is responsible for their own child (reg 4(2)), so that child also counts as a non-dependant, and DWP includes them under para 10(1)(d)-(f).
    • When the Secretary of State added (g) by SI 2013/2828, DWP said the same in the Explanatory Memorandum (para 7.22).
    • DWP writes in its staff guidance Housing Costs Contributions – non-dependants (V13.0, which it deposited in Parliament as DEP2023-0791): "children can be expected to share rooms together, such as children of the main claimant or claimants with those of non-dependants".
  • A lodger's or joint tenant's child falls outside the extended benefit unit: the parent falls under (d), so the child falls under (g). DWP takes the same view of joint tenants' children in the same memorandum (para 7.6).
  • No one is responsible for a child looked after by a local authority (reg 4(6)(a)), such as a foster child, except a child placed for adoption (reg 4A(1)(c), from 1 April 2024).
  • Under para 12, the renter gets one additional bedroom for each condition they meet (12(9)):
    • Overnight care condition. The renter, a member of the extended benefit unit, or a foster child receives a listed benefit and has carers who do not live in the home, engaged to stay overnight regularly ((A1), (3)).
    • Foster parent condition. The renter is a foster parent, or "an adopter with whom a child has been placed for adoption". The condition continues for 12 months between placements ((4)-(5)).
    • In reg 2, the Secretary of State gives "adopter" the meaning in reg 89(3)(a): "a person who has been matched with a child for adoption and who is, or is intended to be, the responsible carer for the child, but excluding a person who is a foster parent or close relative of the child". The Secretary of State lists the close relatives in reg 2 too: a parent, parent-in-law, son, son-in-law, daughter, daughter-in-law, step-parent, step-son, step-daughter, brother or sister, or the partner of any of them.
    • In ADM F3138, DWP gives one bedroom where two people need overnight care (example 1) and adds the overnight-care and foster rooms together (example 2).
  • In para 29(9A), the Secretary of State excepts from the shared accommodation rate a renter under 35 who "satisfies the foster parent condition (within the meaning of paragraph 12(4))", so the definition of adopter applies there too.
  • A renter who receives armed forces independence payment also meets the para 29(5) disability exception, because the Secretary of State defines "attendance allowance" in reg 2 to include it.

Housing Benefit (HB Regs 2006 and HB (SPC) Regs 2006, reg 13D):

  • The claimant gets one bedroom for each category of "occupier" (13D(3)), and the authority counts as occupiers "the persons whom the relevant authority is satisfied occupy as their home the dwelling ... except for any joint tenant who is not a member of the claimant's household" (13D(12)).
    • In the LHA Guidance Manual (paras 2.030-2.031), DWP lists non-dependants, boarders and sub-tenants as occupiers, and in HB/CTB circular A4/2012 (para 44) it says the same of lodgers.
    • Their children count as occupiers too. In Hockley (quoted at [2019] AACR 27, para 9), the Upper Tribunal put the method as "identify the individuals who occupy the dwelling as their home and then to place them into the categories".
  • Under HB, the authority doesn't count a joint tenant's household: "the calculation is based on each tenant's individual household size" (circular A21/2013 para 25; LHA Guidance Manual para 2.093; A3/2017 example 10).
  • A child or young person placed "with the claimant or his partner" as a foster child, prior to adoption or for adoption doesn't count as a member of the claimant's household, "nor ... occupying the claimant's dwelling" (reg 21(3)(a)-(c)). In each limb, the Secretary of State names the claimant or partner. A child placed with a non-dependant, boarder or lodger therefore occupies the claimant's dwelling as their home and counts in the claimant's size criteria. DWP's guidance doesn't reach a child placed with another family: where DWP writes in the LHA Guidance Manual that foster children "do not occupy the dwelling" (para 2.033), it writes of "the customer's family", and in A21/2013 paras 22 to 25 it writes of joint tenants.
  • A child or young person who lives with the claimant but falls outside the household under reg 21 doesn't count as a non-dependant (reg 3(2)(c)).
  • A "qualifying parent or carer" (reg 2(1)) has one additional bedroom (13D(3A)(b)). So does a claimant where any of "(i) the claimant; (ii) the claimant's partner; (iii) a person (other than the claimant or the claimant's partner) who occupies the claimant's dwelling as their home; (iv) a child or young person in respect of whom the claimant or the claimant's partner is a qualifying parent or carer" requires overnight care (13D(3A)(a)). A claimant who meets both has two (13D(3B)). Neither such claimant counts as a "young individual" for the shared accommodation rate.
  • Under 13D(3), each occupier falls in the "first category only which applies". DWP applies the categories combinatorially: "A child is required to share where there is no combination of sharing consistent with the size criteria which allows them their own bedroom" (A21/2013 para 13). So the model allocates children to the fewest rooms under both schemes.

Change

Universal Credit (LHA_allowed_bedrooms) Housing Benefit (housing_benefit_LHA_allowed_bedrooms)
Children counted own children + non-dependants' children, pooled, in the claim that counts the household's non-dependants (uc_non_dependants_counted) own children + every child of a non-dependant, boarder or lodger, pooled, for a family liable for the rent
Joint tenant's (sharer's) children not counted (para 9(2)(d), (g)) not counted (13D(12); A21/2013 para 25)
Foster child placed with the family no room; carer +1 (lha_renter_meets_foster_parent_condition) not an occupier of the carer's dwelling; carer +1 (is_housing_benefit_qualifying_parent_or_carer)
Foster child placed with a non-dependant, boarder or lodger no room for the renter (para 9(2)(g)) an occupier of the claimant's dwelling (placed with neither the claimant nor partner, reg 21(3); 13D(12))
Child placed for adoption with the family counts as the adopter's child (reg 4A(1)(c)), and adopter +1 unless the adopter is a foster parent or close relative of the child (reg 89(3)(a)) not an occupier of the adopter's dwelling; adopter +1
Child placed for adoption with a non-dependant, boarder or lodger counts for the renter through a non-dependant adopter (reg 4A(1)(c)) an occupier of the claimant's dwelling
Overnight care +1 if the renter, anyone in the extended benefit unit or a foster child meets the condition +1 if the claimant, partner, another occupier (including a child placed with another family) or a child placed with the claimant requires overnight care
Shared accommodation rate foster parent or adopter excepted (29(9A)); main already counts AFIP under 29(5) qualifying parent or carer and a person who requires overnight care don't count as young individuals
Occupier couple from another family (non-dependant, boarder or lodger) one bedroom each (para 10(1)(c); ADM F3112 note 1), unchanged one bedroom between them (13D(3)(a), "a couple"; LHA Guidance Manual para 2.012)

New variables:

  • Additional bedrooms: LHA_additional_bedrooms, housing_benefit_LHA_additional_bedrooms.
  • Conditions: meets_lha_overnight_care_condition, lha_renter_meets_foster_parent_condition, is_housing_benefit_qualifying_parent_or_carer.
  • is_child_or_young_person_placed_with_family: the reg 21(3) placement test. is_child_or_young_person_for_legacy_benefits now uses it, so children placed for adoption also leave the legacy household (IS reg 16(4), JSA reg 78(4), ESA reg 156(5), HB reg 21(3)). housing_benefit_has_non_dependant and the HB severe disability premium's non-dependant test read the placement test too, so a child placed with the claimant does not become a non-dependant (HB reg 3(2)(c)).
  • tax_free_childcare_qualifying_child excludes a child placed for adoption (Childcare Payments (Eligibility) Regs 2015 reg 4(2)(d)). An adoption placement has a different effect in each scheme:
    • For Universal Credit and Pension Credit, the Secretary of State treats the adopter as responsible (UC reg 4A(1)(c); SPC Sch IIA para 4(3)(c)), as the model already did.
    • Under HB, IS, JSA, ESA and four CTR schemes, the child doesn't count in the household: the English default working-age scheme (SI 2012/2886 Sch para 8(2)(b)-(c)), the English pensioner scheme (SI 2012/2885 reg 8(2)(b)-(c)), the Welsh scheme (WSI 2013/3029 reg 8(2)(b)-(c)) and the Scottish pension-age scheme (SSI 2012/319 reg 11(2)(b)-(c)).
    • In Scottish working-age CTR from 1 April 2022 (SSI 2021/249 reg 7(2), (8)), the Scottish Ministers take out only a child placed with a foster carer, so the adopter is responsible for the child. On that branch, the model's CTR flag reads the Universal Credit flag, which keeps a child placed for adoption, so the child counts and the adopter can be a lone parent there.
    • youngest_child_age_for_legacy_benefits, which drives Income Support lone-parent eligibility, reads the legacy flag and so leaves out a child placed with the family (IS reg 16(4)).
    • Under the CTC rules, a child drops out only while the local authority pays for their keep (reg 3, rule 4 case B). The model can't observe that, so its CTC doesn't change.

New inputs, all default false:

  • is_placed_for_adoption;
  • adopter_is_foster_parent_or_close_relative, set on the child: the person the child lives with on an adoption placement is a foster parent or close relative of the child (UC reg 2, reg 89(3)(a)). Only lha_renter_meets_foster_parent_condition reads it;
  • is_approved_foster_parent_without_placement;
  • has_non_resident_overnight_carer.

A user marks a foster child as a household member with the existing is_looked_after_by_local_authority, whose documentation now describes that use.

New parameters:

  • gov.dwp.LHA.overnight_care_benefits lists the qualifying benefits: attendance allowance, AFIP, DLA care at the middle or highest rate, and the PIP daily living component. The Scottish devolved equivalents (child disability payment, adult disability payment, Scottish adult DLA, pension age disability payment) also qualify under the law. The model has no variables for those, so they count only where the data records them as the DWP benefits. The same holds for the para 29(5) list.
  • household.demographic.looked_after_child_age_limit (18).
  • gov.dwp.LHA.overnight_care_beyond_claimant: false before 1 April 2017, true from then (SI 2017/213). Before that date only the renter, or the HB claimant and partner, could meet the overnight care condition.

New variables:

  • is_looked_after_child: is_looked_after_by_local_authority and under 18. A local authority can look after only a child, a person under 18 (Children Act 1989 ss.22(1) and 105(1)), so the flag has no effect at 18 or over.
    • It replaces the raw flag in the UC, CTC and Pension Credit child tests and in is_child_or_young_person_placed_with_family.
    • Without it, a flagged 18- or 19-year-old qualifying young person dropped out of UC while still giving an HB carer room. A single renter under 35 then got the shared rate.
  • is_lha_foster_child: a looked-after child placed with the renter (see judgment call 5).

income_support_eligible now includes Income Support Sch 1B paras 2 and 2A: "a single claimant or a lone parent with whom a child is placed" by a local authority, or placed for adoption by an adoption agency. Without them, leaving placed children out of the youngest-child test would have taken eligibility from a lone parent whose only child under 5 is a foster or adoptive placement.

bedrooms_for_children takes masks for the family's own children and other families' children, and a mask of the families that count the others; #2010's child_bedrooms does the arithmetic for both schemes.

Main's Universal Credit non-dependants

Main gives an in-unit non-dependant's bedroom and housing cost contribution one definition (is_benefit_unit_non_dependant_for_universal_credit), and leaves a boarder's or lodger's children out of the renter's extended benefit unit (is_uc_non_dependant_of_household_head, para 9(2)(g)). This PR fits its foster children and additional bedrooms to them:

  • is_benefit_unit_non_dependant_for_universal_credit leaves out the claimant's or partner's foster child (is_lha_foster_child; para 9(2)(c) and (3)).
  • In LHA_allowed_bedrooms, a new helper, other_family_non_dependants, holds main's count of other families' non-dependants: is_uc_non_dependant_of_household_head, and the in-unit non-dependants of a family that makes no Universal Credit claim of its own. It adds a foster child aged 16 or 17 who is not a qualifying young person, and gives them to the claim that counts the household's non-dependants unless that claim is the foster family's. Para 9(2)(c) takes them out of their foster parent's extended benefit unit only. Being under 21, they owe no housing cost contribution (para 16(2)(a)).
  • LHA_additional_bedrooms reads the same helper. Main's is_non_dependant_of_household_head now also marks a boarder's or lodger's children, so reading it would give the counting claim an overnight care room for them.
  • lha_renter_has_non_dependant reads the same helper for people from other families, so the shared accommodation rate's flag and the bedroom count name the same people (para 28(4)). It read is_uc_non_dependant_of_household_head alone, which misses both groups the helper adds. The in-family part keeps its rules; Apply each scheme's own non-dependant test to the LHA shared accommodation rate #2030 splits it by scheme.

Judgment calls

  1. UC adopters get two rooms.
    • The child counts because, under reg 4A(1)(c), the adopter is responsible for them, and the adopter also gets the para 12(4)(b) room.
    • On the current text, the adopter gets both, and DWP still lists adopters in ADM F3133. We found no guidance on the combination; in the EM to SI 2024/341 (para 7.5), DWP writes about the child element.
    • Two readings compete before 1 April 2024. In the EM to SI 2024/341, DWP implies that it treated these children as looked after. But in the old reg 4A(1)(b), the Secretary of State already excluded placements with "a person who has parental responsibility", and prospective adopters have parental responsibility (Adoption and Children Act 2002 s.25(3)). The model applies the current rule in every year.
    • The para 12(4)(b) room goes only to an "adopter" as the Secretary of State defines the term in reg 89(3)(a), excluding a foster parent or close relative of the child. The model reads that from adopter_is_foster_parent_or_close_relative on the child. Such a person still meets the condition as a foster parent of another child, or within 12 months after their last placement ended or after approval (para 12(4)(a), (5)). In reg 4A(1)(c), the Secretary of State writes of the child being "placed for adoption", without the defined term, so the child still counts. In HB reg 21(3) and the HB definition of a qualifying parent or carer, the Secretary of State doesn't use the term either, so HB doesn't change.
  2. Under HB, a child placed with someone other than the claimant counts as an occupier. The child may be a non-dependant's, boarder's or lodger's foster child or adoption placement.
    • In every limb of reg 21(3), the Secretary of State names a placement "with the claimant or his partner", and under 13D(12) the authority counts everyone else who occupies the dwelling as their home. So such a child takes a room in the host's size criteria, and their overnight care counts for the host under 13D(3A)(a)(iii).
    • In the carer's own claim, the authority leaves the child out and gives the carer the qualifying parent or carer's room. The authority keeps a joint tenant's household out of the other tenant's count (13D(12); A21/2013 para 25).
    • DWP's guidance doesn't reach this case: in LHA Guidance Manual para 2.033, DWP writes of "the customer's family", and in A21/2013 paras 22 to 25, of joint tenants.
    • Universal Credit doesn't change: under para 9(2)(c) and (g), with reg 4(6)(a), a foster child stays out of the extended benefit unit, and under reg 4A(1)(c), a child placed for adoption stays in it.
    • For a renter of 60 with a non-dependant daughter fostering a child of 6, the model gives 3 HB bedrooms and 2 UC bedrooms.
  3. HB reg 21(3)(a) and s.22C(2).
    • Since SI 2017/901, reg 21(3)(a) refers to a placement "under section 22C(2) of the Children Act 1989". Under s.22C(2), a local authority places the child with a parent; it makes foster placements under s.22C(5)-(6), and the earlier text cited s.23(2)(a).
    • The model treats foster placements as within reg 21(3), as the definition of "qualifying parent or carer" presupposes. For English pensioner CTR, the Secretary of State says so expressly ("section 22C", SI 2012/2885 reg 8(2)(a)), and for Welsh CTR the Welsh Ministers do too ("section 22C or 23(2)(a)", WSI 2013/3029 reg 8(2)(a)).
    • On the current text, a looked-after child placed back with a parent also falls outside the HB household. The model can't represent that alongside UC, where, under reg 4A(1)(b), such a child stays in the household. See known gaps.
  4. Not observed.
    • HB's qualifying parent or carer, and the HB overnight-care carer, need a spare bedroom in the dwelling (A3/2017 example 10). The model has no count of the dwelling's bedrooms (no formula reads num_bedrooms, and the data lacks it), so it assumes the dwelling has one.
    • The model also leaves out HB's alternative overnight-care route, where the authority accepts evidence instead of a listed benefit.
  5. The model reads a foster "child" as under 18 for UC.
    • In reg 2, the Secretary of State defines a foster parent as "a person with whom a child is placed" under the care planning regulations, under which local authorities place children under 18. In para 9(3), the Secretary of State defines a foster child as "a child" in relation to whom the renter is a foster parent, and in para 12(A1)(c) writes of "a child".
    • In WRA 2012 s.40, Parliament defines a child as a person under 16, unless the contrary intention appears (Interpretation Act 1978 s.11). In reg 91(2)(b)-(d), the Secretary of State writes of foster parents of qualifying young persons.
    • The model reads "child" as under 18 in all three places (is_lha_foster_child). A looked-after 16- or 17-year-old placed with the renter therefore counts as a foster child: they have no room of their own, the renter has the foster room, and their overnight care counts.
    • Reading "child" as under 16 throughout gives the same total for a looked-after 17-year-old not in education (2). It differs for a looked-after qualifying young person (1 instead of 2), which reverses Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's expected value for that case.
    • We found no guidance or case law on it.
    • The shared lha_renter_has_non_dependant still counts a looked-after 17-year-old not in education as a non-dependant. Its separate age-16 rule catches a 16-year-old. HB treats them the same way; on this reading, UC doesn't. Apply each scheme's own non-dependant test to the LHA shared accommodation rate #2030 splits that variable into UC and HB versions and excludes is_lha_foster_child from the UC one.
  6. HB overnight care for other occupiers.
    • In 13D(3A)(a)(iii), the Secretary of State writes "a person ... who occupies the claimant's dwelling as their home", without the defined term "occupiers", so on the text a joint tenant outside the claimant's household could qualify.
    • The model counts the occupiers of the size criteria: for a family liable for the rent, everyone in the families not liable for it, including a child placed with one of them (judgment call 2). It applies 13D(12)'s exclusion of a joint tenant outside the claimant's household and of that tenant's family. In the private sector, the authority sets each joint tenant's size criteria by their own household (A21/2013 para 25). In A3/2017, DWP also frames the 2017 extension as a room for carers of a disabled child or non-dependant.
  7. Dates.
    • The model gates the overnight-care extension at 1 April 2017. The model reads gov parameters at 30 April of each year (its fiscal-year convention), so the extension applies from model year 2017 (2017-18).
    • UC para 29(9A), the foster parent exception, took effect on 28 November 2018 (SI 2018/1129). The model applies it in every year, because in the EM to SI 2018/1129 (para 7.12), DWP describes it as its existing policy before then.

Invariants

test_lha_bedroom_young_people_properties.py holds 9 Hypothesis properties, with 25 derandomized examples each, plus explicit examples. Properties 1 to 7 come from this PR; 8 and 9 come from main.

  • Generators. They make up to 4 households, each with a head family and up to 2 others (sharers, boarders, lodgers, non-dependants). A family has 1-2 adults and up to 4 children, each the family's own, a foster child or a child placed for adoption. Some people need overnight care, and some carers fall between placements.
  • The added person aged 16 to 19. The generator favours a person looked after, in education and not on benefits in their own right; it sometimes gives them overnight care, and sometimes makes them the household head.
  • Status comes from inputs. The tests work out the added person's status from the inputs alone, using their own predicates: UC reg 5 qualifying young person, the Child Benefit qualifying young person for HB reg 19, and looked after under 18 for a foster child. Which claim counts the non-dependants and which families are liable for the rent come from the model, and other tests cover them.
  1. Monotonicity. Adding a person aged 16 to 19 never lowers any family's UC or HB bedrooms. This holds with the claimant and partner supplied or inferred.

  2. Exact effect of a person aged 16 to 19. This extends Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's property:

    • A qualifying young person no one is responsible for, a foster child under 18, or a household head who is not a qualifying young person has no UC room of their own. A young person placed under reg 21(3) has no HB room in the carer's claim.
    • The family that takes the placement gains the foster or carer room if it did not have it already.
    • If they join a non-dependant's family, the UC claim counting the household's non-dependants gains a room unless no one is responsible for them. If they join a non-dependant's, boarder's or lodger's family, each family liable for the rent gains an HB room, placed or not.
    • No other family's bedrooms change.
    • A counting claim that gains a room from another family's person has a non-dependant on lha_renter_has_non_dependant, so its renter gets no shared accommodation rate (para 28(4)).
  3. Children. Adding a child under 16 who is neither fostered nor placed for adoption raises each family's bedrooms by 0 or 1, under each scheme.

  4. Placed children. Adding a child under 16 placed with a family as a foster child or for adoption gives that family one more bedroom under each scheme if it did not already meet the foster condition, and none otherwise. If that family is a non-dependant's, boarder's or lodger's, each family liable for the rent gains 0 or 1 HB bedrooms. A foster child changes no other family's UC bedrooms; a child placed for adoption adds 0 or 1 to the adopter's family and to the claim counting a non-dependant adopter's household. No joint tenant's bedrooms change.

  5. Reference count. Each family's bedrooms and additional bedrooms equal the test's own count.

    • The test finds the children's rooms by brute force: the fewest rooms that hold the pooled children two to a room. This also checks the greedy arithmetic in child_bedrooms against the optimum.
    • The count applies the same legal readings as the model, including judgment call 2. It checks that the code implements those readings, not whether the readings hold. We worked the YAML cases' legal expectations by hand.
  6. In-unit non-dependants (Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's property). Every benefit-unit member aged 16 or over who is not the claimant or partner, a UC qualifying young person, the household head or the family's foster child has a UC bedroom of their own, and making them qualifying young persons the renter is responsible for leaves every family's UC bedrooms unchanged.

  7. The close-relative input. Setting adopter_is_foster_parent_or_close_relative on every member takes away lha_renter_meets_foster_parent_condition where, and only where, an adoption placement was the family's only route to it, lowers that family's UC bedrooms by one, and leaves UC responsibility, the HB placement test, the qualifying parent or carer and every family's HB bedrooms unchanged.

  8. Rooms and contributions (main's property). No one owes a housing cost contribution without being a non-dependant (para 13). An in-unit non-dependant aged 16 to 64, not in education, owes one unless under 21 or on Attendance Allowance (para 16(2)). The claim that bears them gains that contribution, unless its renter is exempt (para 15), and one bedroom: their own family's claim if it makes one, otherwise the claim that counts the household's non-dependants.

  9. Coding (main's property). Moving a non-claiming adult aged 20 or over between a family and a benefit unit of their own changes no claim's UC bedrooms, contributions or award, with one exception. Where the adult's family makes its own claim and doesn't count the household's non-dependants, the family's claim bears them while they belong to it (property 8), and the counting claim bears them in a benefit unit of their own. Their bedroom then moves between those two claims, and no other claim changes. Main's own model gives the same result, so main's version of the property also failed on this case (see Known gaps).

test_council_tax_reduction_young_person_properties.py adds:

  • Scottish working-age adoption placements. From 2022-23, placing any member of a Scottish working-age family for adoption leaves the CTR child flag, lone-parent status and the applicable amount unchanged.

Before the merge of main, on 300 generated households (604 benefit units) in Maidstone in 2025, with no placement, overnight-care or between-placements inputs and no children outside the head's family, LHA_allowed_bedrooms and housing_benefit_LHA_allowed_bedrooms agree with #2010's d8c2249 for every benefit unit. Each household has a head family of 1-2 adults aged 20-85 and up to 4 children aged 0-19 (those aged 16 or over with random education and benefits), and up to 2 adult-only sharer, boarder, lodger or non-dependant families.

We ran each mutation as one change to a copy of the branch, against the named tests.

At 1f3ce21 (the earlier head), each made at least one property fail:

  • no pooling of non-dependants' children (UC);
  • foster children given their own UC rooms;
  • one overnight-care room per person instead of one in total;
  • HB counting a joint tenant's children;
  • no mixed-sex sharing for children under 10;
  • adopters without the UC para 12(4)(b) room.

At 1f3ce21, YAML cases also killed four more mutations: "placed" without the Child Benefit young-person test; a non-dependant's foster child's overnight care counting under UC; reverting (A1)(c) for a looked-after qualifying young person; and a looked-after claimant giving the foster room (a case with a 17-year-old looked-after claimant pins it; the property generator supplies claimant roles, so the properties cannot reach it).

At 9834880:

Mutation YAML (LHA_other_families_…, LHA_young_person_bedroom, council_tax_reduction_young_person) Properties Result
HB others drops placed children again 7 cases fail 2 of 3 fail (exact effect, placed children, reference) killed
HB own keeps placed children 12 cases fail 3 of 3 fail killed
Puts ~placed back in housing_benefit_LHA_additional_bedrooms 1 case fails (the non-dependant's foster child with overnight care) the reference count's explicit example fails killed
Scotland's working-age branch reads the legacy flag 3 cases fail, including Case 12 the adoption property fails killed
Drops adopter_is_foster_parent_or_close_relative 2 cases fail the close-relative property fails killed
Applies the input to HB's qualifying parent or carer 2 cases fail the close-relative property fails killed
Applies the input to is_child_or_qualifying_young_person_for_universal_credit 3 cases fail the close-relative property fails killed
Drops the placed test from housing_benefit_has_non_dependant 1 case fails ("A child placed with the claimant is not a Housing Benefit non-dependant") not run killed

Commits after 9834880

  • 2a3111c merges main at 117e674. Four files conflicted: shared_accommodation_exception_benefits.yaml takes main's version; lha_renter_has_non_dependant.py and LHA_allowed_bedrooms.py combine both sides; and the property test numbers its properties 1 to 9.
  • 1f24fca fits this PR's foster children and additional bedrooms to main's UC non-dependants (see Change).
  • 86de492, 2e4cec7 and 2f42ce1 update three test files for main's results (see Tests).
  • e2f368d makes lha_renter_has_non_dependant read other_family_non_dependants (see Main's Universal Credit non-dependants), with two YAML cases through final Universal Credit and a new check in property 2. b460cf6 adds an explicit example for each route to that check.

Tests

At b460cf6 (this head):

  • CI: every job in pr_code_changes.yaml passed (run 42936378851), and all 21 checks on this head pass. The run tests this head merged with main at 3cf10f8. YAML: 6,659 passed, two more than at 2f42ce1: the two new cases. Python, 8 shards: 13,394 passed, 61 skipped, 2 xfailed, with no failures; all three property modules below ran (9, 7 and 3 tests). The Python count exceeds 2f42ce1's because main's seven commits since that run's base added tests; this PR's later commits add no test functions.
  • Locally, serially (YAML and the three modules at e2f368d's tree; property 2 again with b460cf6's examples):
    • YAML, policyengine-core test … -c policyengine_uk: LHA_other_families_children_and_additional_bedrooms.yaml 45 passed; LHA_young_person_bedroom.yaml 15; benefit_unit_non_dependants.yaml 45; claims_as_single_person.yaml 33; rent_of_sharers_boarders_and_lodgers.yaml 19; LHA_claimant_composition.yaml 17; boarders_and_lodgers_non_dependants.yaml 16; resolved_household_head.yaml 9. That covers every YAML file that names lha_renter_has_non_dependant, plus benefit_unit_non_dependants.yaml for in-unit non-dependants.
    • Python, pytest: test_lha_bedroom_young_people_properties.py 9 passed; test_benefit_cap_lha_scheme_split_properties.py 7; test_household_head_agreement_properties.py 3.
  • The new YAML cases follow two routes through final Universal Credit in Maidstone in 2026, each with a single head of 30 who claims and a non-claiming sharer of 40 who earns £60,000 and is liable for half the £26,000 rent:
    • the sharer's looked-after foster child of 17, not in education: category C, housing costs element £10,860, UC £15,958.80 before the benefit cap and £14,753 after;
    • the sharer's son of 22 in the sharer's benefit unit: category C, housing costs element £9,701.40 after his £1,158.60 contribution, UC £14,800.20 before the cap and £14,753 after.
  • Reproducers. With the flag as it stood at 2f42ce1 and these tests, both new YAML cases fail, and both new @example cases fail property 2's check. With the fix, all pass. Property 2's 25 derandomized examples alone never reached either route, so b460cf6 pins both with @example: a claiming sharer of 40 with a looked-after 17-year-old not in education, and a sharer of 70, who makes no Universal Credit claim, with a 19-year-old not in education.

At 2f42ce1:

  • Full suite, pr_code_changes.yaml on a branch at this commit (run 42897383483): every job passed. YAML: 6,657 passed. Python, 8 shards: 13,333 passed, 61 skipped, 2 xfailed, including both property modules below.
  • YAML, locally: LHA_other_families_children_and_additional_bedrooms.yaml 44 passed; council_tax_reduction_young_person.yaml 13 passed.
  • Two YAML files now expect main's results:
    • In LHA_other_families_children_and_additional_bedrooms.yaml, a lodger's child who pays nothing counts as the householder's HB non-dependant, since HB reg 3(2)(e)(i) excepts only the paying lodger, and not as a UC one (para 9(2)(g)).
    • In council_tax_reduction_young_person.yaml, Cases 11 and 12 take Scotland's working-age route. The lone parent's applicable amount comes to (92.05 + 105.85) × 52 = £10,290.80; the £25 a week earnings disregard leaves income of £11,000 − £25 × 52 = £9,700, so CTR covers the whole £1,800 of council tax, with and without the adoption placement.
  • CI at 20dfb3b, an earlier build of this merge, found two property counterexamples; both tests now pin them with @example:
    • test_claimant_not_own_child_properties.py (main's file), property 3: an 18-year-old with the looked-after flag in approved training. Its restatement of the CTC and Pension Credit child tests now reads the flag only under 18, as is_looked_after_child does.
    • test_lha_bedroom_young_people_properties.py, property 9: a sharer's family that claims beside the household head's.
  • ruff format --check and ruff check (0.16.7) pass on the changed Python files.

At 9834880 (before the merge of main):

  • YAML, policyengine-core test … -c policyengine_uk: 97 passed.
    • LHA_other_families_children_and_additional_bedrooms.yaml: 44 cases, including a renter of 60 whose non-dependant daughter has a child placed with her, as a foster child and for adoption (HB [3, 2]; UC [2, 2] and [3, 3]), both through final Housing Benefit, a looked-after young person of 17 placed with a non-dependant, a child placed with a lodger, a child placed with a joint tenant, a non-dependant's placed child who needs overnight care (HB [4, 3]), three close-relative adopter cases, and a placed child who is not an HB non-dependant.
    • LHA_young_person_bedroom.yaml: 11. The case of a looked-after qualifying young person in a non-dependant's family now expects the carer's foster room: [2, 2], categories [C, C].
    • LHA_claimant_composition.yaml: 17. income_support.yaml: 7. tax_free_childcare_qualifying_child.yaml: 5.
    • council_tax_reduction_young_person.yaml: 13, including Cases 11-13: in Scotland's working-age scheme, an adopter of 23 with a child of 3 has the same lone-parent status, applicable amount (£4,786.60) and final CTR (£286.40) with and without the adoption placement, and under Scotland's pension-age scheme the child placed for adoption drops out.
  • Python, pytest … -n 4:
    • test_lha_bedroom_young_people_properties.py: 7 passed.
    • test_child_and_adult_definitions_properties.py: 18 passed.
    • test_means_test_income_properties.py: 2 passed.
    • test_rent_of_sharers_boarders_and_lodgers_properties.py: 6 passed. Its no-op bedroom check now covers households with no child outside the head's family.
    • test_council_tax_reduction_young_person_properties.py: 7 passed. Its scheme-selection reference now stops looked-after status at 18.
    • test_household_head_agreement_properties.py: 3 passed, with the two additional-bedroom variables added to its outputs.
    • policyengine_uk/tests/code_health: 3,102 passed.
  • ruff format --check, ruff check and ruff check --select F811,F821 policyengine_uk (0.17.2): all pass.

Differential grid

We ran 23 hand-built households in Maidstone in 2026, each once with Universal Credit claims and once with Housing Benefit claims (46 runs). We ran them at seven commits: main at 3cf10f8 and at 117e674, main immediately before (e050200) and after (fdc0c78) #2010 landed, #2016's earlier head 9834880, 2f42ce1, and e2f368d, whose model code this head keeps. Twenty households pay a private rent of £200 a week. Three sharer households with a head of 30 pay £500 a week in the South East, so each family's half exceeds the shared accommodation rate. For every benefit unit or person, we compared LHA_allowed_bedrooms, LHA_category, housing_benefit_LHA_allowed_bedrooms, uc_non_dep_deductions, universal_credit, housing_benefit, lha_renter_has_non_dependant, is_non_dependant_of_household_head, is_uc_non_dependant_of_household_head and is_benefit_unit_non_dependant_for_universal_credit. No run raised an error.

The previous version of this grid set the claim inputs on some benefit units only, which left the others at the default of no claim. This version sets them on every benefit unit, and sets the roles of every person in the three households with a head of 30.

main at 3cf10f8 and at 117e674 give identical results on every case.

This head against main gives 35 differences, all from this PR. At 2f42ce1 there are 27:

  • A foster child of 10 no longer counts as the renter's non-dependant (lha_renter_has_non_dependant 1 to 0, renters aged 30 and 40, under both schemes). The bedrooms stay at 2, as the foster room replaces the child's room.
  • A looked-after 16-year-old stays a qualifying young person until the 1 September after their 16th birthday (UC reg 5), so they have no room of their own and their foster parent gains the foster room: 1 bedroom to 2 and category B to C under both schemes, and Universal Credit rises from £14,098.80 to £15,498.80 a year. Where a sharer fosters them, the sharer's family goes from 1 bedroom to 2 under both schemes, and the head's claim stays at 2.
  • A looked-after 17-year-old not in education no longer counts as their foster parent's in-unit non-dependant (is_benefit_unit_non_dependant_for_universal_credit 1 to 0). Where the foster parent rents alone, the foster room replaces their own room, so the total stays at 2. Where a sharer who claims fosters them, the head's claim, which counts the household's non-dependants, takes their bedroom from the sharer's claim: with the head's own child of 8, it goes from 2 bedrooms to 3 and category C to D, and the sharer keeps 2 with the foster room. Where the sharer makes no claim, the head's claim already had their bedroom on main and keeps it.
  • A non-dependant's son of 3 has a room in the renter's UC claim: 2 bedrooms to 3 and category C to D. Main's HB already counts him.
  • A child of 5 placed for adoption gives the adopter's room as well as the child's: 2 bedrooms to 3 under both schemes. main has no is_placed_for_adoption input, so there the child counts as the renter's own.

e2f368d adds 8, all from the flag:

  • In the two households with a head of 30 where a non-claiming sharer has a looked-after 17-year-old not in education or an in-unit son of 22, the head's claim already had that person's bedroom. It now has a non-dependant on the flag, so category C instead of A. Universal Credit rises from £10,436.76 to £14,753 with the foster child, and from £9,278.16 to £14,753 with the son, whose £1,158.60 contribution the head's claim bears. The benefit cap sets both at £14,753.
  • In two households with a head of 40, only the flag changes, since the shared accommodation rate applies only under 35.
  • Where the sharer claims, the sharer's own claim counts the son of 22, and nothing changes.

Between 9834880 and 2f42ce1, 92 differences are variables that main added after 9834880's base. Of the 25 value changes, 23 come from main:

The other 2 are this PR's: the 17-year-old a sharer fosters gives the head's claim its third bedroom (1f24fca).

The final-HB cases use Maidstone in 2026, where the rent of £300 a week exceeds the D rate: the renter's HB at three bedrooms, £8,889.92, exceeds the HB at two, £5,359.64, by £3,530.28.

Impact (real microsimulation)

We ran these on #2010's earlier head and this PR's earlier head: base 49866c2, branch 500424e (084664c and 9311e4e give identical aggregates). We haven't rerun them at this head; a rerun needs the dataset. They use the enhanced FRS 2024-25 as released (policyengine-uk-data 1.57.4, enhanced_frs_2024_25.h5, sha256 03fe15e4…), for 2026.

We identify a survey household by its rent and its members' ages, which every enhanced-FRS record shares with its FRS 2024-25 source household. We suppress cells built from fewer than 10 survey households, and suppress sub-cells together when any one of them falls short, so no one can recover a hidden cell by subtraction.

At 500424e against 49866c2, we estimate:

  • Children under 16 in a non-dependant's family: 135k (64 survey households).
  • Boarder or lodger families, or sharers' families, with children: 0. The released data has no boarder or lodger rent yet (drafts policyengine-uk-data#506 and Add Energy Bills Rebate #512 add it).
  • UC bedroom counts: rise for 109k benefit units (62 survey households). None falls.
  • HB bedroom counts:
    • fall for 430k benefit units (66 survey households), because an occupier couple now counts once;
    • rise for 66k (47 survey households), because of non-dependants' children.
  • Private renters, the only group whose LHA depends on the bedroom count:
    • UC changes affect fewer than 10 survey households, so we suppress UC categories, the housing costs element and UC paid.
    • HB categories change for 22k benefit units (12 survey households); we suppress each transition.
    • The HB eligible rent under the LHA (LHA_cap, which the model computes for every private renter whether or not they claim) rises by £14.7m net.
    • HB paid does not change: the change reaches no private-renting HB recipient.
  • Poverty (BHC and AHC): no change.
  • Foster, adoption and overnight-care inputs: default false and not in the data, so those changes have no microsimulation effect.
  • Shared accommodation: UC specified-renter and HB young-individual flags do not change.

Figures this head can move, pending a rerun:

  • Everything main changed since 49866c2, which this head merges at 117e674: Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's household head and non-dependant counting (uc_non_dependants_counted, is_resolved_household_head) and HB occupiers for sharers' claims, and main's later UC non-dependant rules.
  • UC non-dependants' children and additional bedrooms now follow uc_non_dependants_counted rather than the household head's family, so a household whose head does not claim UC can give them to a sharer's claim.
  • HB couples now merge into one bedroom only where the family is a couple (is_couple) as well as having two claimants or partners.
  • The placement, close-relative and overnight-care changes read inputs that default to false and that the data lacks, so they move no survey figure.
  • The shared accommodation rate's non-dependant flag now counts the people from other families whose bedrooms the counting claim has (e2f368d), so a UC claimant under 35 in such a household can move from category A. The earlier runs found no change in the UC specified-renter flag; they predate this commit.

Known gaps (not changed here)

  • Disabled child and disabled couple rooms (UC para 12(1)(c)-(d), (6), (6A), (8); HB 13D(3)(za), (ba)): the model leaves them out. Branch lha-disabled-cannot-share-rooms adds them.
  • Temporary absence (UC para 11; HB reg 7) and the armed forces rule: the model leaves them out.
  • Shared non-dependants for joint tenants. Under HB, the authority counts a non-dependant shared by joint tenants in each joint tenant's size criteria (LHA Guidance Manual para 2.110). The model gives the household's non-dependants to the families liable for the rent under HB and to one claim under UC; branch hb-joint-tenant-shared-non-dependant (Count a non-dependant shared by joint tenants in each tenant's Housing Benefit size criteria #2029) addresses apportionment.
  • Head family. With no head input, the eldest member becomes the household head (is_resolved_household_head), even if a lodger.
  • Joint tenant in the claimant's household. The model treats a joint tenant who is a member of the claimant's household as a separate sharer (LHA Guidance Manual para 2.100, the Lee example).
  • HB evidence route for overnight care, and the spare-bedroom conditions (judgment call 4).
  • A looked-after child placed back with a parent falls outside the HB household on the current text of reg 21(3)(a). The model keeps them in, as UC does.
  • A lodger's child counts as a non-dependant. In HB reg 3(1), the Secretary of State makes anyone who normally resides with the claimant a non-dependant, so on the text a lodger's or boarder's child counts as one; the model counts only non-dependants' families. Model rent from boarders, lodgers and sub-tenants for the householder #2002 addresses this.
  • Scottish working-age CTR before 1 April 2022. The model applies the Child Benefit test, which leaves out a child placed for adoption, to Scotland's working-age scheme for those years. We haven't read SSI 2012/303's text for this change.
  • Scottish working-age CTR earnings disregard. On Scotland's route, the model counts earnings in working-age CTR applicable income with no earnings disregard; we haven't read the scheme's own disregards for this change.
  • HB "eligible children". In HB reg 19(2)(c), the Secretary of State leaves out of "young person" anyone to whom Children (Leaving Care) Act 2000 s.6 applies, including an eligible child: a 16- or 17-year-old whom a local authority looks after and has looked after for 13 weeks since age 14. Such a person counts as an occupier with a room, and gives no carer room. The model has no input for it and treats every looked-after qualifying young person as placed. Totals usually match, because an occupier room replaces the carer room.
  • Claiming sharers and coding (property 9). Where two renter families in a household each claim UC, the model puts an adult coded in the sharer's benefit unit on the sharer's claim, and the same adult coded in a benefit unit of their own on the counting claim. Main does the same. Whether the law apportions a non-dependant's contribution between renters (Sch 4 paras 13 to 16) needs its own reading.
  • Scottish devolved disability benefits: the model has no separate variables for them (see New parameters; Include the Scottish devolved disability benefits in the LHA size-criteria benefit lists #2041).

Documentation

The variables' documentation fields describe the rules. No docs notebook covers the size criteria.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 1, 2026 14:30
…bedrooms in the LHA size criteria

Universal Credit (UC Regs 2013 Sch 4 paras 9-12): the household head's
non-dependants' children are in the extended benefit unit and share rooms
with the renter's children; foster children are in no one's extended benefit
unit; foster parents and adopters with a child placed (para 12(4)-(5)) and
renters whose household includes someone with non-resident overnight care
(para 12(A1), (3)) get one additional bedroom for each condition (12(9)).
Foster parents are excepted from the shared accommodation rate (29(9A)), and
armed forces independence payment counts in the para 29(5) exception.

Housing Benefit (HB Regs 2006 and HB (SPC) Regs 2006 reg 13D): the children
of non-dependants, boarders and lodgers are occupiers (13D(12)); a child
placed with the claimant as a foster child or for adoption is not (reg
21(3)); a qualifying parent or carer and a person who requires overnight care
give one additional bedroom each (13D(3A)-(3B)) and are not young
individuals.

New inputs: is_placed_for_adoption, is_approved_foster_parent_without_placement,
has_non_resident_overnight_carer.

Fixes #2011

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
HB reg 21(3) names only children placed with the claimant or partner, but
DWP treats foster children as not occupying the dwelling (LHA Guidance
Manual para 2.033; HB circular A21/2013 para 22), as Universal Credit does
(UC Sch 4 para 9(2)(g)). The household head's Housing Benefit size criteria
and overnight-care bedroom now leave out a child placed with a non-dependant,
boarder or lodger as a foster child or for adoption. Adds a YAML case and
tightens the foster-child Hypothesis property to an exact effect on every
family.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 1, 2026 16:01
HB Regs 2006 reg 13D(3)(a) puts any occupier couple in "a couple" (one
bedroom; LHA Guidance Manual para 2.012), so a non-dependant's, boarder's or
lodger's couple adds one bedroom to the household head's HB size criteria,
not two. Universal Credit is unchanged: each non-dependant who is not a
child has a bedroom (UC Sch 4 para 10(1)(c); ADM F3112 note 1). Reported by
the disabled-rooms session (chip task_cc724597).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Childcare Payments (Eligibility) Regs 2015 reg 4(2)(d): no one is
responsible for a child placed for adoption by an adoption agency in the
home of a person proposing to adopt them. The new is_placed_for_adoption
input is documented for each scheme it touches: Universal Credit and
Pension Credit treat the adopter as responsible (UC reg 4A(1)(c); SPC Sch
IIA para 4(3)(c)); HB, the legacy schemes and English pensioner CTR do not
count the child in the household; CTC's rule 4 case B depends on local
authority payments and is not modelled. Changelog covers the HB occupier
couple rule too. Found by the first review attempt's probes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nt test predicates

- HB occupier couple: count the half rooms only when both members are
  counted, so a benefit unit flagged as a couple without two adults no
  longer produces a fractional bedroom (and an enum error downstream).
- UC: read "child" as under 18 for foster children throughout
  (is_lha_foster_child; parameter gov.dwp.LHA.foster_child_age_limit): a
  looked-after 16- or 17-year-old placed with the renter has no room of
  their own, and their overnight care counts under para 12(A1)(c).
- Overnight care beyond the renter or HB claimant and partner applies from
  1 April 2017 (SI 2017/213; parameter overnight_care_beyond_claimant).
- youngest_child_age_for_legacy_benefits leaves out a child placed with
  the family (IS reg 16(4)).
- Property tests derive the added person's status from the inputs (UC
  reg 5, Child Benefit QYP, looked after under 18) instead of the model,
  bias the generator towards looked-after young people, and give the added
  person overnight care in the reference property.
- YAML: 13 new cases pinning the reviewer's surviving mutants and probes,
  a case with an inconsistent couple flag, and a 2016 date-gate case; the
  fostering-couple case now uses ages that detect counting the foster
  child; corrected citations.
- Documentation: Scottish working-age CTR adoption gap, Scottish devolved
  disability benefits, HB 13D(3A)(a)(iii) reading, reg 21(3)(a) and
  s.22C, and the overnight-carer and adoption inputs.

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 #2016's reading of "foster child" (UC Sch 4 para 9(3), with the
reg 2 foster parent definition) as a looked-after person under 18 placed
with the renter (is_lha_foster_child), so a looked-after 16- or 17-year-old
who is not a qualifying young person is excluded by para 9(2)(c) rather
than counted as a non-dependant. The WRA 2012 s.40 reading (a child is
under 16) would count them; the code records both. HB is unchanged: such a
person is not a young person (reg 19), so reg 21(3) does not apply and they
are a non-dependant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Keeps #2016's paired couple weights and April 2017 overnight-care gate,
routes the weights through housing_benefit_other_occupiers, and updates
the #2016 independent reference so a non-dependant counts for every
joint occupier by default (sharers included) and boarders and lodgers for
the household head only.

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

- is_looked_after_child: the looked-after flag applies only under 18
  (Children Act 1989 ss.22(1), 105(1)). It replaces the raw flag in the UC,
  CTC and Pension Credit child tests and in the legacy placement test, so a
  flagged 18- or 19-year-old qualifying young person keeps their UC room
  and gives no HB carer room. The looked-after age limit moves to
  household.demographic.looked_after_child_age_limit.
- HB occupier couples need is_couple as well as two counted claimant or
  partner members, so relation_type SINGLE is respected again.
- Income Support Sch 1B para 2: a single claimant or lone parent with whom
  a child is placed by a local authority is a prescribed category.
- YAML: a looked-after 17-year-old claimant (pins the claimant-guard
  mutant), a looked-after 18-year-old with a single renter of 30, a
  non-dependant pair entered as single, two IS para 2 cases.
- Property predicates apply the under-18 limit and accept any non-tertiary
  education; P5 renamed to a reference count. The child-definition
  property reference applies the same under-18 limit.
- Documentation: HB reg 19(2)(c) eligible children; looked-after flag
  under 18 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 #2016's reading of "foster child" (UC Sch 4 para 9(3), with the
reg 2 foster parent definition) as a looked-after person under 18 placed
with the renter (is_lha_foster_child), so a looked-after 16- or 17-year-old
who is not a qualifying young person is excluded by para 9(2)(c) rather
than counted as a non-dependant. The WRA 2012 s.40 reading (a child is
under 16) would count them; the code records both. HB is unchanged: such a
person is not a young person (reg 19), so reg 21(3) does not apply and they
are a non-dependant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
Follows #2016's reading of "foster child" (UC Sch 4 para 9(3), with the
reg 2 foster parent definition) as a looked-after person under 18 placed
with the renter (is_lha_foster_child), so a looked-after 16- or 17-year-old
who is not a qualifying young person is excluded by para 9(2)(c) rather
than counted as a non-dependant. The WRA 2012 s.40 reading (a child is
under 16) would count them; the code records both. HB is unchanged: such a
person is not a young person (reg 19), so reg 21(3) does not apply and they
are a non-dependant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 and others added 2 commits October 2, 2026 05:24
… single case

- Income Support Sch 1B para 2A: a single claimant or lone parent with
  whom a child is placed for adoption by an adoption agency is a
  prescribed category, so leaving the placed child out of the para 1
  youngest-child test no longer removes eligibility. Two YAML cases.
- The relation_type SINGLE YAML case now marks the parent and son's roles
  explicitly, so it asserts the legally correct [3, 2]; a separate case
  pins the is_couple guard on the renter's count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…euse placement test

- Two Income Support cases that must be ineligible: a couple with a child
  placed for adoption, and a placement aged 16 (para 2A needs a single
  claimant or lone parent, and a child under 16).
- The is_couple guard case asserts only the renter's bedrooms.
- income_support_eligible reuses is_child_or_young_person_placed_with_family
  (under 16) instead of re-deriving it; renamed has_placed_child.
- is_placed_for_adoption documentation mentions IS Sch 1B para 2A.

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

Copy link
Copy Markdown
Collaborator Author

Coordination note from #2062 (issue #2059), which makes every programme read one household head.

This PR's LHA_additional_bedrooms, LHA_allowed_bedrooms and housing_benefit_LHA_additional_bedrooms read the raw is_household_head input. That input can flag several members of a household, or none, and programmes reading it directly then disagree about whose household it is. #2062 adds is_resolved_household_head (exactly one per household) and defines benunit_contains_household_head from it.

Whichever of the two PRs lands second needs these readers switched:

  • family level: benunit.any(person("is_household_head", period)) becomes benunit("benunit_contains_household_head", period), and person.benunit.any(person("is_household_head", period)) becomes person.benunit("benunit_contains_household_head", period);
  • person level: person("is_household_head", period) becomes person("is_resolved_household_head", period).

#2062 adds a test, test_only_the_resolved_head_reads_the_flag, that fails while any module other than is_resolved_household_head reads the raw flag. If this PR lands first, #2062 makes the switch when it merges main. If #2062 lands first, the switch belongs here. Survey results do not change either way: the Enhanced FRS has exactly one flagged head per household.

…y the UC adopter definition

HB reg 21(3) names only a placement with the claimant or partner, so a child
placed with a non-dependant, boarder or lodger occupies the claimant's dwelling
(13D(12)) and counts in the host's size criteria and under 13D(3A)(a)(iii).
The carer's own claim still leaves the child out.

UC Sch 4 para 12(4)(b) applies to an adopter as reg 89(3)(a) defines it, which
excludes a foster parent or close relative of the child. The new child-level
input adopter_is_foster_parent_or_close_relative feeds only the foster parent
condition, and so para 29(9A).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FYBy8zKExK1r9z9fW
The CTR scheme-selection reference now stops looked-after status at 18, as
is_looked_after_child does. The sharers' no-op bedroom check covers
households with no child outside the head's family, since non-dependants'
children now share the head's children's rooms.

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

Copy link
Copy Markdown
Collaborator Author

PR_TITLE.txt

Count other families' children and add LHA foster and care bedrooms


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

PR_BODY.md

Fixes #2011
Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_other_families_children_and_additional_bedrooms.yaml::A non-dependant's foster child raises the renter's final Housing Benefit

axiom: uk/regulations/uksi/2013/376/schedule/4/paragraph/10 (UC Sch 4 para 10(1)(d)-(f), (3)(b)) encoded-correct, companion cases in TheAxiomFoundation/rulespec-uk#412 | UC Sch 4 para 9(2)(c), (g) (non-dependants' children, foster children): TheAxiomFoundation/rulespec-uk#406 queued (addendum: https://github.com/TheAxiomFoundation/rulespec-uk/issues/406#issuecomment-5938349255; extension: <406 extension URL>) | UC Sch 4 paras 12 and 29(5), (9A), with reg 2 and reg 89(3)(a) "adopter": TheAxiomFoundation/rulespec-uk#411 queued (extension: <411 extension URL>) | HB Regs 2006 / HB (SPC) Regs 2006 regs 2(1), 13D(3)(c)-(e), (3A)-(3B), (12), 21(3): TheAxiomFoundation/rulespec-uk#406 and #357 queued (addenda: https://github.com/TheAxiomFoundation/rulespec-uk/issues/406#issuecomment-5938349255, https://github.com/TheAxiomFoundation/rulespec-uk/issues/357#issuecomment-5938349612; extension: <406 extension URL>)

Stacked on #2010 (base `lha-bedroom-young-people`). Retarget to `main` once it merges.

## Problem

The LHA size criteria had three gaps:

1. **Other families' children.** `bedrooms_for_children` counted only the claimant's own benefit unit, so a grandchild living with their parent in the renter's home never had a room. Under Housing Benefit, neither did a boarder's or lodger's child.
2. **Foster children.** They had a bedroom of their own, and the foster parent had no additional bedroom. `lha_renter_has_non_dependant` also counted a foster child under 16 as a non-dependant, which took a single foster parent under 35 out of the shared accommodation rate for the wrong reason.
3. **Overnight care.** There was no additional bedroom for non-resident overnight carers.

## The law, and how DWP applies it

Provisions were read on legislation.gov.uk on 2026-10-01; reg 2 and reg 89(3)(a) of the UC Regs 2013 and HB reg 21(3) again on 2026-11-02.

**Universal Credit** ([UC Regs 2013 Sch 4](https://www.legislation.gov.uk/uksi/2013/376/schedule/4)):
- The extended benefit unit is the renter, the children and qualifying young persons they are responsible for, and "any person who is a non-dependant" ([para 9(1)](https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/9)).
- A non-dependant is anyone who normally lives with the renter, with seven exceptions in para 9(2). Three matter here:
  - (c): the renter's foster child;
  - (d): a person liable on a commercial basis, such as a lodger or joint tenant;
  - (g): "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible".
- A non-dependant is responsible for their own child ([reg 4(2)](https://www.legislation.gov.uk/uksi/2013/376/regulation/4)), so that child is a non-dependant and counts under [para 10(1)(d)-(f)](https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/10).
  - The Explanatory Memorandum to SI 2013/2828, which inserted (g), says the same (para 7.22).
  - DWP's staff guidance *Housing Costs Contributions – non-dependants* (V13.0, deposited in Parliament as DEP2023-0791) says: "children can be expected to share rooms together, such as children of the main claimant or claimants with those of non-dependants".
- A lodger's or joint tenant's child is outside the extended benefit unit: (d) excludes the parent, so (g) excludes the child. EM 2013/2828 para 7.6 says the same of joint tenants' children.
- No one is responsible for a child looked after by a local authority ([reg 4(6)(a)](https://www.legislation.gov.uk/uksi/2013/376/regulation/4)), such as a foster child. The exception is a child placed for adoption ([reg 4A(1)(c)](https://www.legislation.gov.uk/uksi/2013/376/regulation/4A), from 1 April 2024).
- [Para 12](https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/12) gives one additional bedroom for each condition met (12(9)):
  - **Overnight care condition.** The renter, a member of the extended benefit unit, or a foster child receives a listed benefit and has carers who do not live in the home, engaged to stay overnight regularly ((A1), (3)).
  - **Foster parent condition.** The renter is a foster parent, or "an adopter with whom a child has been placed for adoption". This continues for 12 months between placements ((4)-(5)).
  - [Reg 2](https://www.legislation.gov.uk/uksi/2013/376/regulation/2) gives "adopter" the meaning in [reg 89(3)(a)](https://www.legislation.gov.uk/uksi/2013/376/regulation/89): "a person who has been matched with a child for adoption and who is, or is intended to be, the responsible carer for the child, but excluding a person who is a foster parent or close relative of the child". Reg 2 lists the close relatives: a parent, parent-in-law, son, son-in-law, daughter, daughter-in-law, step-parent, step-son, step-daughter, brother or sister, or the partner of any of them.
  - ADM F3138 example 1 confirms that two people needing overnight care still give one bedroom; example 2 confirms that the overnight-care and foster rooms are cumulative.
- [Para 29(9A)](https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/29) excepts from the shared accommodation rate a renter under 35 who "satisfies the foster parent condition (within the meaning of paragraph 12(4))", so the adopter definition carries through.
- The para 29(5) disability exception includes armed forces independence payment, because reg 2 defines "attendance allowance" to include it.

**Housing Benefit** (HB Regs 2006 and HB (SPC) Regs 2006, [reg 13D](https://www.legislation.gov.uk/uksi/2006/213/regulation/13D)):
- One bedroom for each category of "occupier": "the persons whom the relevant authority is satisfied occupy as their home the dwelling ... except for any joint tenant who is not a member of the claimant's household" (13D(12)).
  - [LHA Guidance Manual](https://assets.publishing.service.gov.uk/media/5a758238ed915d6faf2b38a2/lha-guidance-manual.pdf) paras 2.030-2.031 list non-dependants, boarders and sub-tenants as occupiers. HB/CTB circular A4/2012 para 44 says the same of lodgers.
  - Their children are occupiers too. The Upper Tribunal in *Hockley* (quoted at [2019] AACR 27, para 9) put the method as "identify the individuals who occupy the dwelling as their home and then to place them into the categories".
- HB does not count a joint tenant's household: "the calculation is based on each tenant's individual household size" (circular A21/2013 para 25; LHA Guidance Manual para 2.093; A3/2017 example 10).
- A child or young person is not a member of the claimant's household, "nor ... occupying the claimant's dwelling", where they are placed "with the claimant or his partner" as a foster child, prior to adoption or for adoption ([reg 21(3)](https://www.legislation.gov.uk/uksi/2006/213/regulation/21)(a)-(c)). Every limb names the claimant or partner. A child placed with a non-dependant, boarder or lodger therefore occupies the claimant's dwelling as their home and counts in the claimant's size criteria. The LHA Guidance Manual's statement that foster children "do not occupy the dwelling" (para 2.033) speaks of "the customer's family", and A21/2013 paras 22 to 25 concern joint tenants, so neither reaches a child placed with another family.
- A child or young person living with the claimant who is not a member of the household by virtue of reg 21 is not a non-dependant ([reg 3(2)(c)](https://www.legislation.gov.uk/uksi/2006/213/regulation/3)).
- A "qualifying parent or carer" ([reg 2(1)](https://www.legislation.gov.uk/uksi/2006/213/regulation/2)) has one additional bedroom (13D(3A)(b)). So does a claimant where any of "(i) the claimant; (ii) the claimant's partner; (iii) a person (other than the claimant or the claimant's partner) who occupies the claimant's dwelling as their home; (iv) a child or young person in respect of whom the claimant or the claimant's partner is a qualifying parent or carer" requires overnight care (13D(3A)(a)). Both together give two (13D(3B)). Neither such claimant is a "young individual" for the shared accommodation rate.
- 13D(3) puts each occupier in the "first category only which applies". DWP applies them combinatorially: "A child is required to share where there is no combination of sharing consistent with the size criteria which allows them their own bedroom" (A21/2013 para 13). So the fewest-rooms allocation serves both schemes.

## Change

| | Universal Credit (`LHA_allowed_bedrooms`) | Housing Benefit (`housing_benefit_LHA_allowed_bedrooms`) |
|---|---|---|
| Children counted | own children + non-dependants' children, pooled, in the claim that counts the household's non-dependants (`uc_non_dependants_counted`) | own children + every child of a non-dependant, boarder or lodger, pooled, for a family liable for the rent |
| Joint tenant's (sharer's) children | not counted (para 9(2)(d), (g)) | not counted (13D(12); A21/2013 para 25) |
| Foster child placed with the family | no room; carer +1 (`lha_renter_meets_foster_parent_condition`) | not an occupier of the carer's dwelling; carer +1 (`is_housing_benefit_qualifying_parent_or_carer`) |
| Foster child placed with a non-dependant, boarder or lodger | no room for the renter (para 9(2)(g)) | an occupier of the claimant's dwelling (reg 21(3) names only the claimant or partner; 13D(12)) |
| Child placed for adoption with the family | counts as the adopter's child (reg 4A(1)(c)), **and** adopter +1 unless the adopter is a foster parent or close relative of the child (reg 89(3)(a)) | not an occupier of the adopter's dwelling; adopter +1 |
| Child placed for adoption with a non-dependant, boarder or lodger | counts for the renter through a non-dependant adopter (reg 4A(1)(c)) | an occupier of the claimant's dwelling |
| Overnight care | +1 if the renter, anyone in the extended benefit unit or a foster child meets the condition | +1 if the claimant, partner, another occupier (including a child placed with another family) or a child placed with the claimant requires overnight care |
| Shared accommodation rate | foster parent or adopter excepted (29(9A)); AFIP added to 29(5) | qualifying parent or carer and a person who requires overnight care are not young individuals |
| Occupier couple from another family (non-dependant, boarder or lodger) | one bedroom each (para 10(1)(c); ADM F3112 note 1), unchanged | one bedroom between them (13D(3)(a), "a couple"; LHA Guidance Manual para 2.012) |

New variables:
- Additional bedrooms: `LHA_additional_bedrooms`, `housing_benefit_LHA_additional_bedrooms`.
- Conditions: `meets_lha_overnight_care_condition`, `lha_renter_meets_foster_parent_condition`, `is_housing_benefit_qualifying_parent_or_carer`.
- `is_child_or_young_person_placed_with_family`: the reg 21(3) placement test. `is_child_or_young_person_for_legacy_benefits` now uses it, so children placed for adoption also leave the legacy household (IS reg 16(4), JSA reg 78(4), ESA reg 156(5), HB reg 21(3)). `housing_benefit_has_non_dependant` and the HB severe disability premium's non-dependant test read the placement test too, so a child placed with the claimant does not become a non-dependant (HB reg 3(2)(c)).
- `tax_free_childcare_qualifying_child` excludes a child placed for adoption (Childcare Payments (Eligibility) Regs 2015 reg 4(2)(d)). Each scheme treats an adoption placement differently:
  - Universal Credit and Pension Credit treat the adopter as responsible (UC reg 4A(1)(c); SPC Sch IIA para 4(3)(c)), which the model already did.
  - Under HB, IS, JSA, ESA and four CTR schemes, the child is not in the household. The CTR schemes are the English default working-age scheme (SI 2012/2886 Sch para 8(2)(b)-(c)), English pensioner (SI 2012/2885 reg 8(2)(b)-(c)), Welsh (WSI 2013/3029 reg 8(2)(b)-(c)) and Scottish pension-age (SSI 2012/319 reg 11(2)(b)-(c)).
  - Scottish working-age CTR from 1 April 2022 (SSI 2021/249 reg 7(2), (8)) takes out only a child placed with a foster carer, so the adopter is responsible for the child. The model's CTR flag reads the Universal Credit flag on that branch, which keeps a child placed for adoption, so the child counts and the adopter can be a lone parent there.
  - `youngest_child_age_for_legacy_benefits`, which drives Income Support lone-parent eligibility, reads the legacy flag and so leaves out a child placed with the family (IS reg 16(4)).
  - CTC excludes the child only while the local authority pays for their keep (reg 3, rule 4 case B). The model can't observe that, so CTC does not change.

New inputs, all default false:
- `is_placed_for_adoption`;
- `adopter_is_foster_parent_or_close_relative`, set on the child: the person with whom the child is placed for adoption is a foster parent or close relative of the child (UC reg 2, reg 89(3)(a)). Only `lha_renter_meets_foster_parent_condition` reads it;
- `is_approved_foster_parent_without_placement`;
- `has_non_resident_overnight_carer`.

A foster child is a household member with the existing `is_looked_after_by_local_authority`, now documented for that use.

New parameters:
- `gov.dwp.LHA.overnight_care_benefits` lists the qualifying benefits: attendance allowance, AFIP, DLA care at the middle or highest rate, and the PIP daily living component. The law also lists the Scottish devolved equivalents (child disability payment, adult disability payment, Scottish adult DLA, pension age disability payment). The model has no variables for those, so they count only where the data records them as the DWP benefits. The same holds for the para 29(5) list, a gap that predates this PR.
- `household.demographic.looked_after_child_age_limit` (18).
- `gov.dwp.LHA.overnight_care_beyond_claimant`: false before 1 April 2017, true from then (SI 2017/213). Before that date only the renter, or the HB claimant and partner, could meet the overnight care condition.

New variables:
- `is_looked_after_child`: `is_looked_after_by_local_authority` and under 18. Only a child, a person under 18, can be looked after (Children Act 1989 ss.22(1) and 105(1)), so the flag has no effect at 18 or over.
  - It replaces the raw flag in the UC, CTC and Pension Credit child tests and in `is_child_or_young_person_placed_with_family`.
  - Without it, a flagged 18- or 19-year-old qualifying young person dropped out of UC while still giving an HB carer room. A single renter under 35 then got the shared rate.
- `is_lha_foster_child`: a looked-after child placed with the renter (see judgment call 5).

Income Support: `income_support_eligible` now includes Sch 1B paras 2 and 2A: "a single claimant or a lone parent with whom a child is placed" by a local authority, or placed for adoption by an adoption agency. Without them, leaving placed children out of the youngest-child test would have taken eligibility from a lone parent whose only child under 5 is a foster or adoptive placement.

`bedrooms_for_children` takes masks for the family's own children and other families' children, and a mask of the families that count the others; #2010's `child_bedrooms` does the arithmetic for both schemes.

### Judgment calls for review

1. **UC adopters get two rooms.**
   - The child counts because reg 4A(1)(c) makes the adopter responsible, and the adopter also gets the para 12(4)(b) room.
   - The current text gives both, and ADM F3133 still lists adopters. No guidance addresses the combination; EM to SI 2024/341 para 7.5 is about the child element.
   - Before 1 April 2024 the position is unclear. EM 2024/341 implies DWP treated these children as looked after. But the old reg 4A(1)(b) already excluded placements with "a person who has parental responsibility", and prospective adopters have parental responsibility (Adoption and Children Act 2002 s.25(3)). The model applies the current rule in every year.
   - Para 12(4)(b) applies only to an "adopter" as reg 89(3)(a) defines it, which leaves out a foster parent or close relative of the child. The model reads that from `adopter_is_foster_parent_or_close_relative` on the child. Such a person still meets the condition as a foster parent of another child or within 12 months of a placement or approval (para 12(4)(a), (5)). Reg 4A(1)(c) speaks of the child being "placed for adoption" and carries no such words, so the child still counts; HB reg 21(3) and HB's qualifying parent or carer carry none either, so HB does not change.
2. **HB: a child placed with someone other than the claimant is an occupier.** This covers a non-dependant's, boarder's or lodger's foster child or adoption placement.
   - Every limb of reg 21(3) names a placement "with the claimant or his partner", and 13D(12) counts everyone else who occupies the dwelling as their home. So such a child takes a room in the host's size criteria, and their overnight care counts for the host under 13D(3A)(a)(iii).
   - The carer's own claim leaves the child out and has the qualifying parent or carer's room. A joint tenant's household stays out of the other tenant's count (13D(12); A21/2013 para 25).
   - LHA Guidance Manual para 2.033 speaks of "the customer's family", and A21/2013 paras 22 to 25 concern joint tenants, so neither reaches this case.
   - Universal Credit does not change: para 9(2)(c) and (g) with reg 4(6)(a) keep out a foster child, and reg 4A(1)(c) keeps in a child placed for adoption.
   - For a renter of 60 with a non-dependant daughter fostering a child of 6, the model gives 3 HB bedrooms and 2 UC bedrooms.
3. **HB reg 21(3)(a) and s.22C(2).**
   - Since SI 2017/901, reg 21(3)(a) refers to a placement "under section 22C(2) of the Children Act 1989". That is placement with a parent; foster placements are s.22C(5)-(6), and the earlier text cited s.23(2)(a).
   - The model treats foster placements as within reg 21(3), as the "qualifying parent or carer" definition presupposes. The English pensioner CTR rule says so expressly ("section 22C", SI 2012/2885 reg 8(2)(a)), as does the Welsh one ("section 22C or 23(2)(a)", WSI 2013/3029 reg 8(2)(a)).
   - On the current text, a looked-after child placed back with a parent is also outside the HB household. The model can't represent that alongside UC's reg 4A(1)(b), which keeps such a child in the household. Listed under known gaps.
4. **Not observed.**
   - HB's qualifying parent or carer, and the HB overnight-care carer, need a spare bedroom in the dwelling (A3/2017 example 10). The model has no count of the dwelling's bedrooms (no formula reads `num_bedrooms`, and the data lacks it), so it assumes there is one.
   - The model also leaves out HB's alternative overnight-care route, where the authority accepts evidence instead of a listed benefit.
5. **UC "child" means under 18 for foster children.**
   - Reg 2 makes a foster parent "a person with whom a child is placed" under the care planning regulations, which place children under 18. Para 9(3) defines a foster child as "a child" in relation to whom the renter is a foster parent, and para 12(A1)(c) refers to "a child".
   - WRA 2012 s.40 defines a child as under 16, unless the contrary intention appears (Interpretation Act 1978 s.11). Reg 91(2)(b)-(d) speaks of foster parents of qualifying young persons.
   - The model reads "child" as under 18 in all three places (`is_lha_foster_child`). A looked-after 16- or 17-year-old placed with the renter is therefore a foster child: they have no room of their own, the renter has the foster room, and their overnight care counts.
   - Reading "child" as under 16 throughout gives the same total for a looked-after 17-year-old not in education (2). It differs for a looked-after qualifying young person (1 instead of 2), which reverses #2010's expected value for that case.
   - No guidance or case law addresses it.
   - The shared `lha_renter_has_non_dependant` still counts a looked-after 17-year-old not in education as a non-dependant. A 16-year-old is caught by its separate age-16 rule. That is right for HB and, on this reading, wrong for UC. PolicyEngine/policyengine-uk#2030 splits that variable into UC and HB versions and excludes `is_lha_foster_child` from the UC one.
6. **HB overnight care for other occupiers.**
   - 13D(3A)(a)(iii) reads "a person ... who occupies the claimant's dwelling as their home", without the defined term "occupiers". On the text, it could reach a joint tenant outside the claimant's household.
   - The model counts the occupiers of the size criteria: for a family liable for the rent, everyone in the families not liable for it, including a child placed with one of them (judgment call 2). It applies 13D(12)'s exclusion of a joint tenant outside the claimant's household and of that tenant's family. In the private sector, joint tenants' size criteria rest on each tenant's own household (A21/2013 para 25). A3/2017 also frames the 2017 extension as a room for carers of a disabled child or non-dependant.
7. **Dates.**
   - The model gates the overnight-care extension at 1 April 2017. The model reads `gov` parameters at 30 April of each year (its fiscal-year convention), so the extension applies from model year 2017, which is 2017-18.
   - UC para 29(9A), the foster parent exception, has been in law since 28 November 2018 (SI 2018/1129). The model applies it in every year, because EM 2018/1129 para 7.12 describes it as DWP's existing policy before then.

## Invariants

The Hypothesis properties are in `test_lha_bedroom_young_people_properties.py`: 7 properties, 25 derandomized examples each, plus explicit examples.
- **Generators.** They make up to 4 households, each with a head family and up to 2 others (sharers, boarders, lodgers, non-dependants). A family has 1-2 adults and up to 4 children; children are own, fostered or placed for adoption. Overnight care and between-placements carers also appear.
- **The added person aged 16 to 19.** The generator favours a person looked after, in education and not on benefits in their own right; it sometimes gives them overnight care, and sometimes makes them the household head.
- **Status comes from inputs.** The tests work out the added person's status from the inputs alone, using their own predicates: UC reg 5 qualifying young person, the Child Benefit qualifying young person for HB reg 19, and looked after under 18 for a foster child. Which claim counts the non-dependants and which families are liable for the rent come from the model, and other tests cover them.

1. **Monotonicity.** Adding a person aged 16 to 19 never lowers any family's UC or HB bedrooms. This holds with the claimant and partner supplied or inferred.
2. **Exact effect of a person aged 16 to 19.** This extends #2010's property:
   - A qualifying young person no one is responsible for, a foster child under 18, or a household head who is not a qualifying young person has no UC room of their own. A young person placed under reg 21(3) has no HB room in the carer's claim.
   - The family they are placed with gains the foster or carer room if it did not have it already.
   - If they join a non-dependant's family, the UC claim counting the household's non-dependants gains a room unless no one is responsible for them. If they join a non-dependant's, boarder's or lodger's family, each family liable for the rent gains an HB room, placed or not.
   - No other family's bedrooms change.
3. **Children.** Adding a child under 16 who is neither fostered nor placed for adoption raises each family's bedrooms by 0 or 1, under each scheme.
4. **Placed children.** Adding a child under 16 placed with a family as a foster child or for adoption gives that family exactly one more bedroom under each scheme if it did not already meet the foster condition, and none otherwise. If that family is a non-dependant's, boarder's or lodger's, each family liable for the rent gains 0 or 1 HB bedrooms. A foster child changes no other family's UC bedrooms; a child placed for adoption adds 0 or 1 to the adopter's family and to the claim counting a non-dependant adopter's household. No joint tenant's bedrooms change.
5. **Reference count.** Each family's bedrooms and additional bedrooms equal a count made by the test.
   - Children's rooms are the fewest rooms holding the pooled children two to a room, found by brute force. This also checks the greedy arithmetic in `child_bedrooms` against the optimum.
   - The count applies the same legal readings as the model, including judgment call 2. It checks that the code implements those readings, not that the readings are right. The YAML cases carry the hand-derived legal expectations.
6. **In-unit non-dependants** (#2010's property). Every benefit-unit member aged 16 or over who is not the claimant or partner, a UC qualifying young person, the household head or the family's foster child has a UC bedroom of their own, and making them qualifying young persons the renter is responsible for leaves every family's UC bedrooms unchanged.

7. **The close-relative input.** Setting `adopter_is_foster_parent_or_close_relative` on every member takes away `lha_renter_meets_foster_parent_condition` exactly where an adoption placement was the family's only route to it, lowers that family's UC bedrooms by one, and leaves UC responsibility, the HB placement test, the qualifying parent or carer and every family's HB bedrooms unchanged.

`test_council_tax_reduction_young_person_properties.py` adds:
8. **Scottish working-age adoption placements.** From 2022-23, placing any member of a Scottish working-age family for adoption leaves the CTR child flag, lone-parent status and the applicable amount unchanged.

**Differential against #2010.** On 300 generated households (604 benefit units) with no placement, overnight-care or between-placements inputs and no children outside the head's family, Maidstone, 2025, `LHA_allowed_bedrooms` and `housing_benefit_LHA_allowed_bedrooms` agree with d8c224979 for every benefit unit. Each household has a head family of 1-2 adults aged 20-85 and up to 4 children aged 0-19 (those aged 16 or over with random education and benefits), and up to 2 adult-only sharer, boarder, lodger or non-dependant families.

**Mutation checks.** Each mutation ran in a scratch copy against the named tests.

At 1f3ce21a0 (the earlier head), each made at least one property fail:
- no pooling of non-dependants' children (UC);
- foster children given their own UC rooms;
- one overnight-care room per person instead of one in total;
- HB counting a joint tenant's children;
- no mixed-sex sharing for children under 10;
- adopters without the UC para 12(4)(b) room.

Earlier rounds also pinned, at 1f3ce21a0: "placed" without the Child Benefit young-person test; a non-dependant's foster child's overnight care counting under UC; reverting (A1)(c) for a looked-after qualifying young person (each fails a YAML case); and a looked-after claimant giving the foster room (a 17-year-old looked-after claimant case pins it; the property generator supplies claimant roles, so the properties cannot reach it).

At this head:

| Mutation | YAML (`LHA_other_families_…`, `LHA_young_person_bedroom`, `council_tax_reduction_young_person`) | Properties | Result |
|---|---|---|---|
| HB `others` drops placed children again | 7 cases fail | 2 of 3 fail (exact effect, placed children, reference) | killed |
| HB `own` keeps placed children | 12 cases fail | 3 of 3 fail | killed |
| `~placed` back in `housing_benefit_LHA_additional_bedrooms` | 1 case fails (the non-dependant's foster child with overnight care) | the reference count's explicit example fails | killed |
| Scotland's working-age branch reads the legacy flag | 3 cases fail, including Case 12 | the adoption property fails | killed |
| `adopter_is_foster_parent_or_close_relative` dropped | 2 cases fail | the close-relative property fails | killed |
| The input applied to HB's qualifying parent or carer | 2 cases fail | the close-relative property fails | killed |
| The input applied to `is_child_or_qualifying_young_person_for_universal_credit` | 3 cases fail | the close-relative property fails | killed |
| `housing_benefit_has_non_dependant` without the placed test | 1 case fails ("A child placed with the claimant is not a Housing Benefit non-dependant") | not run | killed |

## Tests

At 983488065 (this head):
- **YAML**, `policyengine-core test … -c policyengine_uk`: 97 passed.
  - `LHA_other_families_children_and_additional_bedrooms.yaml`: 44 cases, including the review's family as a foster placement and as an adoption placement (HB `[3, 2]`; UC `[2, 2]` and `[3, 3]`), both through final Housing Benefit, a looked-after young person of 17 placed with a non-dependant, a child placed with a lodger, a child placed with a joint tenant, a non-dependant's placed child who needs overnight care (HB `[4, 3]`), three close-relative adopter cases, and a placed child who is not an HB non-dependant.
  - `LHA_young_person_bedroom.yaml`: 11. The case of a looked-after qualifying young person in a non-dependant's family now expects the carer's foster room: `[2, 2]`, categories `[C, C]`.
  - `LHA_claimant_composition.yaml`: 17. `income_support.yaml`: 7. `tax_free_childcare_qualifying_child.yaml`: 5.
  - `council_tax_reduction_young_person.yaml`: 13, including Cases 11-13: the review's Scottish family with and without the adoption placement gives the same lone-parent status, applicable amount (£4,786.60) and final CTR (£286.40), and Scotland's pension-age scheme leaves the child out.
- **Python**, `pytest … -n 4`:
  - `test_lha_bedroom_young_people_properties.py`: 7 passed.
  - `test_child_and_adult_definitions_properties.py`: 18 passed.
  - `test_means_test_income_properties.py`: 2 passed.
  - `test_rent_of_sharers_boarders_and_lodgers_properties.py`: 6 passed. Its no-op bedroom check now covers households with no child outside the head's family.
  - `test_council_tax_reduction_young_person_properties.py`: 7 passed. Its scheme-selection reference now stops looked-after status at 18.
  - `test_household_head_agreement_properties.py`: 3 passed, with the two additional-bedroom variables added to its outputs.
  - `policyengine_uk/tests/code_health`: 3,102 passed.
- `ruff format --check`, `ruff check` and `ruff check --select F811,F821 policyengine_uk` (0.17.2): clean.
- CI runs the full suite.

The review's figures (£11,892.40 and £14,200.68 a year, £228.70 and £273.09 a week) match no BRMA in the model's LHA tables for 2024 to 2028. The final-HB cases use Maidstone in 2026 instead, where the rent of £300 a week exceeds the D rate: the renter's HB comes to £8,889.92 at three bedrooms against £5,359.64 at two, £3,530.28 more. The Scottish CTR figure comes to £286.40 against the review's £286.30 on the old stack.

## Impact (real microsimulation)

These runs used #2010's earlier head and this PR's earlier head: base 49866c284, branch 500424e0e (084664c5c and 9311e4e99 give identical aggregates). They have not been rerun at this head, which needs the dataset. Data: the enhanced FRS 2024-25 as released (policyengine-uk-data 1.57.4, `enhanced_frs_2024_25.h5`, sha256 `03fe15e4…`), year 2026.

The runs identify a survey household by its rent and its members' ages, which every enhanced-FRS record shares with its FRS 2024-25 source household. They suppress cells built from fewer than 10 survey households, and suppress sub-cells together when any one of them falls short, so no one can recover a hidden cell by subtraction.

At 500424e0e against 49866c284:
- **Children under 16 in a non-dependant's family:** 135k (64 survey households).
- **Boarder or lodger families, or sharers' families, with children:** 0. The released data has no boarder or lodger rent yet (policyengine-uk-data#506 and #512 are drafts).
- **UC bedroom counts:** rise for 109k benefit units (62 survey households). None falls.
- **HB bedroom counts:**
  - fall for 430k benefit units (66 survey households), because an occupier couple now counts once;
  - rise for 66k (47 survey households), because of non-dependants' children.
- **Private renters**, the only group whose LHA depends on the bedroom count:
  - UC changes affect fewer than 10 survey households, so the runs suppress UC categories, the housing costs element and UC paid.
  - HB categories change for 22k benefit units (12 survey households); the runs suppress each transition.
  - The HB eligible rent under the LHA (`LHA_cap`, computed for every private renter whether or not they claim) rises by £14.7m net.
  - HB paid does not change: the change reaches no private-renting HB recipient.
- **Poverty (BHC and AHC):** no change.
- **Foster, adoption and overnight-care inputs:** default false and not in the data, so those changes have no microsimulation effect.
- **AFIP:** the data has no recipients.
- **Shared accommodation:** UC specified-renter and HB young-individual flags do not change.

Figures this head can move, pending a rerun:
- Everything #2010 changed since 49866c284, which this head merges (d8c224979): the household head and non-dependant counting (`uc_non_dependants_counted`, `is_resolved_household_head`), HB occupiers for sharers' claims, and the merged `main`.
- UC non-dependants' children and additional bedrooms now follow `uc_non_dependants_counted` rather than the household head's family, so a household whose head does not claim UC can give them to a sharer's claim.
- HB couples now merge into one bedroom only where the family is a couple (`is_couple`) as well as having two claimants or partners.
- The placement, close-relative and overnight-care changes read inputs that default to false and are not in the data, so they move no survey figure.

## Known gaps (not changed here)

- **Disabled child and disabled couple rooms** (UC para 12(1)(c)-(d), (6), (6A), (8); HB 13D(3)(za), (ba)): the model leaves them out. Branch `lha-disabled-cannot-share-rooms` adds them.
- **Temporary absence** (UC para 11; HB reg 7) and the armed forces rule: the model leaves them out.
- **Shared non-dependants for joint tenants.** HB counts a non-dependant shared by joint tenants in each joint tenant's size criteria (LHA Guidance Manual para 2.110). The model gives the household's non-dependants to the families liable for the rent under HB and to one claim under UC; branch `hb-joint-tenant-shared-non-dependant` (#2029) addresses apportionment.
- **Head family.** With no head input, the eldest member becomes the household head (`is_resolved_household_head`), even if a lodger.
- **Joint tenant in the claimant's household.** The model treats a joint tenant who is a member of the claimant's household as a separate sharer (LHA Guidance Manual para 2.100, the Lee example).
- **HB evidence route for overnight care, and the spare-bedroom conditions** (judgment call 4).
- **A looked-after child placed back with a parent** is outside the HB household on the current text of reg 21(3)(a). The model keeps them in, as UC does.
- **A lodger's child is a non-dependant.** HB reg 3(1) makes a non-dependant anyone who normally resides with the claimant, so on its text a lodger's or boarder's child is one; the model counts only non-dependants' families. #2002 addresses this.
- **Scottish working-age CTR before 1 April 2022.** The model applies the Child Benefit test, which leaves out a child placed for adoption, to Scotland's working-age scheme for those years. SSI 2012/303's text was not read for this change.
- **Scottish working-age CTR earnings disregard.** The model's working-age CTR applicable income counts earnings with no earnings disregard on Scotland's route; the scheme's own disregards were not read for this change.
- **HB "eligible children".** HB reg 19(2)(c) excludes from "young person" anyone covered by Children (Leaving Care) Act 2000 s.6. That covers an eligible child: a looked-after 16- or 17-year-old who has been looked after for 13 weeks since age 14. Such a person is an occupier with a room, and gives no carer room. The model has no input for it and treats every looked-after qualifying young person as placed. Totals usually match, because an occupier room replaces the carer room.
- **Scottish devolved disability benefits**: the model has no separate variables for them (see New parameters; PolicyEngine/policyengine-uk#2041).

## Documentation

The variables' `documentation` fields describe the rules. No docs notebook covers the size criteria.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

AXIOM_406_EXTENSION.md

## Extension: a child placed with someone other than the claimant (PE parity: PolicyEngine/policyengine-uk#2011, PR PolicyEngine/policyengine-uk#2016)

This corrects one row of the addendum above and adds 13D(3A)(a)(iii) for a child placed with another family. The other rows, and the UC para 9 reading, stand.

PolicyEngine-UK now counts a child or young person placed with a non-dependant, boarder or lodger as an occupier of the claimant's dwelling under HB reg 13D. The carer's own claim still leaves the child out and has the qualifying parent or carer's room. A joint tenant's household stays out of the other tenant's count. Universal Credit does not change.

### The law (verbatim, legislation.gov.uk, fetched 2026-11-02)

**HB Regs 2006 (SI 2006/213) reg 21(3)**; HB (SPC) Regs 2006 (SI 2006/214) reg 21(3) is the same:

> (3) A child or young person shall not be treated as a member of the claimant's household, nor as occupying the claimant's dwelling, where he is— (a) placed with the claimant or his partner by a local authority under section 22C(2) of the Children Act 1989 or section 81(2) of the Social Services and Well-being (Wales) Act 2014 or by a voluntary organisation under section 59(1)(a) of that Act, or in Scotland boarded out or placed with the claimant or his partner under a relevant enactment; or (b) placed, or in Scotland boarded out, with the claimant or his partner prior to adoption; or (c) placed for adoption with the claimant or his partner in accordance with the Adoption and Children Act 2002 or the Adoption Agencies (Scotland) Regulations 2009.

**Reg 13D(12), "occupiers"**:

> "occupiers" means— (a) the persons whom the relevant authority is satisfied occupy as their home the dwelling to which the claim or award relates except for any joint tenant who is not a member of the claimant's household; ...

**Reg 13D(3A)(a)**:

> (3A) The claimant is entitled to one additional bedroom in any case where— (a) one or more of the following persons is a person who requires overnight care— (i) the claimant; (ii) the claimant's partner; (iii) a person (other than the claimant or the claimant's partner) who occupies the claimant's dwelling as their home; (iv) a child or young person in respect of whom the claimant or the claimant's partner is a qualifying parent or carer; ...

**Reg 2(1), "qualifying parent or carer"**:

> "qualifying parent or carer" means a person who has a bedroom in the dwelling they occupy as their home additional to those used by the persons who occupy the dwelling as their home and who— (a) has a child or qualifying young person placed with them as mentioned in regulation 21(3) who by virtue of that provision is not treated as occupying their dwelling; ...

**Guidance.**
- LHA Guidance Manual (April 2014) para 2.033: "Foster children cannot be a member of the customer's family and therefore do not occupy the dwelling for the purposes per HB and HB (SPC) Reg 21(3)." It speaks of the customer's family, so it does not reach a child placed with a non-dependant, boarder or lodger.
- Circular A21/2013 paras 22 to 25 concern joint tenants. Para 25: "the calculation is based on each tenant's individual household size". 13D(12)(a) also leaves out a joint tenant outside the claimant's household.

### What the judgment must do

Every limb of reg 21(3) names a placement "with the claimant or his partner". A child placed with anyone else in the dwelling is one of "the persons whom the relevant authority is satisfied occupy as their home the dwelling" (13D(12)(a)), unless they belong to a joint tenant's household outside the claimant's. So:
- in the claimant's size criteria, a child placed with a non-dependant, boarder or lodger falls in the first 13D(3) category that applies, like any other occupier;
- such a child who requires overnight care is "a person ... who occupies the claimant's dwelling as their home" (13D(3A)(a)(iii));
- in the carer's own claim, reg 21(3) applies: the child does not occupy the carer's dwelling, the carer is a qualifying parent or carer (reg 2(1)(a)) with the 13D(3A)(b) bedroom, and the child's overnight care counts under (3A)(a)(iv).

`review_finding` (paste as-is; it replaces the sentence of the step 2 addendum that begins "DWP treats any foster child as not occupying"):

> Reg 21(3) takes out of the claimant's household and dwelling only a child or young person placed with the claimant or the claimant's partner. A child or young person placed with a non-dependant, boarder or lodger occupies the claimant's dwelling as their home and is an occupier under 13D(12)(a): count them in the claimant's 13D(3) categories, and under 13D(3A)(a)(iii) if they require overnight care. In the carer's own claim the child is not an occupier, and the carer is a qualifying parent or carer (reg 2(1)(a)) with one additional bedroom (13D(3A)(b)) and, if the child requires overnight care, another (13D(3A)(a)(iv), (3B)). A joint tenant who is not a member of the claimant's household, and that tenant's household, are not occupiers, whether or not a child is placed with them. The LHA Guidance Manual's para 2.033 concerns the customer's own family and does not decide this case.

### Companion tests

Period 2026, Maidstone. The row this corrects:

| Case | UC (para 10 + 12) | HB (13D) |
|---|---|---|
| Renter 60; non-dependant daughter 32 with a foster child 6 placed with her | 2 | **3** (reg 21(3) names only a placement with the claimant or partner, so the child occupies the renter's dwelling, 13D(12)) |

Further cases. Each figure is worked from the provisions above.

| Case | Renter's UC | Renter's HB | Carer's own UC | Carer's own HB |
|---|---|---|---|---|
| Renter 60; non-dependant daughter 32 with a child 6 placed for adoption with her | 3: renter, daughter, child (reg 4A(1)(c), para 9(1)(c), 10(1)(f)) | 3: renter, daughter, child (13D(3)(b), (b), (e)) | 3: daughter, child, adopter's room (para 12(4)(b)) | 2: daughter and the (3A)(b) room |
| Renter 50; non-dependant daughter 35 with a looked-after young person 17 in full-time non-advanced education placed with her | 2: the young person is no one's responsibility (reg 4(6)(a)), so not a non-dependant (para 9(2)(g)) | 3: renter, daughter, young person (13D(3)(b)) | 2: daughter and the foster room (para 12(4)(a)) | 2: daughter and the (3A)(b) room |
| Householder 60; lodger 30 with a foster child 5 placed with the lodger | 1: lodger excluded (9(2)(d)), child excluded (9(2)(g)) | 3: householder, lodger, child | 2: lodger and the foster room | 2: lodger and the (3A)(b) room |
| Joint tenants 40 and 38; a foster child 7 placed with the second | 1 for the first tenant (9(2)(d)) | 1 for the first tenant (13D(12)(a); A21/2013 para 25) | 2 | 2 |
| Renter 60; non-dependant daughter 32 with a foster child 6 placed with her who requires overnight care (DLA care at the middle rate and non-resident overnight carers) | 2: no overnight room, since the child is outside the renter's extended benefit unit | 4: renter, daughter, child, and the (3A)(a)(iii) room | 3: daughter, foster room, overnight room (12(A1)(c), (9)) | 3: daughter, (3A)(b) and (3A)(a)(iv) rooms (3B) |
| Single 45 with foster children 12 and 11 placed with them (no other occupiers) | 2: foster room only | 2: (3A)(b) room only | — | — |

Final Housing Benefit for the corrected row. Renter 60 with no income; daughter 32 working 35 hours on £20,000 a year; rent £300 a week; Maidstone rates for 2026-27 (the VOA April 2024 rates, frozen): C £208.27, D £276.16.
- Eligible rent at three bedrooms: £276.16 a week, below the rent.
- Non-dependant deduction (reg 74(1)(a), in remunerative work): £20,000 / 52 = £384.62 a week, in the £365 to £485 band, £105.20 a week.
- The renter's income of nil falls below the applicable amount, so no taper.
- HB: (276.16 − 105.20) × 52 = £8,889.92 a year. At two bedrooms it would be (208.27 − 105.20) × 52 = £5,359.64. The placed child adds £67.89 a week, £3,530.28 a year.
- The same figures hold where the child is placed for adoption with the daughter (reg 21(3)(c)).

No separately approved billed signed-encoder run exists for this work.


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

AXIOM_411_EXTENSION.md

## Extension: who is an "adopter" for the foster parent condition (PE parity: PolicyEngine/policyengine-uk#2011, PR PolicyEngine/policyengine-uk#2016)

This adds to steps 1 and 2 above. Para 12(4)(b) uses "adopter", which reg 2 defines by reference to reg 89(3)(a), and that definition leaves out a foster parent or close relative of the child. Para 29(9A) takes the foster parent condition from para 12(4), so it follows. PolicyEngine-UK now reads a child-level input, `adopter_is_foster_parent_or_close_relative`, in the foster parent condition only.

### The law (verbatim, legislation.gov.uk, fetched 2026-11-02)

**UC Regs 2013 (SI 2013/376) reg 2**:

> "adopter" has the meaning in regulation 89(3)(a);

> "close relative", in relation to a person, means— (a) a parent, parent-in-law, son, son-in-law, daughter, daughter-in-law, step-parent, step-son, step-daughter, brother or sister; and (b) if any of the above is a member of a couple, the other member of the couple;

> "foster parent" means— (a) in relation to England, a person with whom a child is placed under the Care Planning, Placement and Case Review (England) Regulations 2010; (b) in relation to Wales, a person with whom a child is placed under the Care Planning, Placement and Case Review (Wales) Regulations 2015; (c) in relation to Scotland, a foster carer or kinship carer with whom a child is placed under the Looked After Children (Scotland) Regulations 2009;

**Reg 89(3)(a)**:

> (3) In paragraph (1)(d)— (a) "adopter" means a person who has been matched with a child for adoption and who is, or is intended to be, the responsible carer for the child, but excluding a person who is a foster parent or close relative of the child; and

**Sch 4 para 12(4) and (5)**:

> (4) A renter satisfies the foster parent condition if the renter is— (a) a foster parent; or (b) an adopter with whom a child has been placed for adoption.
>
> (5) For the purposes of sub-paragraph (4) "foster parent" includes a person who would be a foster parent, but for the fact that they do not currently have any child placed with them, provided that any period since the date when their last placement ended (or, if they have not yet had a child placed with them, since the date when they were approved to be a foster parent) does not exceed 12 months.

**Sch 4 para 29(9A)**:

> (9A) E is under 35 years old and satisfies the foster parent condition (within the meaning of paragraph 12(4)).

**Reg 4A(1)(c)**:

> (c) any period during which the child or qualifying young person is placed for adoption under the Adoption and Children Act 2002 or the Adoption and Children (Scotland) Act 2007.

### What the judgment must do

- An "adopter" (reg 2, reg 89(3)(a)) with whom a child has been placed for adoption meets para 12(4)(b). A person with whom a child is placed for adoption, but who is a foster parent or close relative of that child, is not an "adopter" and does not meet (4)(b) through that placement.
- Such a person still meets para 12(4)(a) if they are a foster parent (reg 2) of another child placed with them, or (5) if they are within 12 months of a placement ending or of approval.
- Para 29(9A) follows para 12(4): it does not except a close-relative adopter under 35 who is not a foster parent.
- Responsibility does not change. Reg 4A(1)(c) speaks of the child being "placed for adoption", without the defined term, so the child placed with a close relative is still the renter's responsibility, in the extended benefit unit (para 9(1)(b)) and counted under para 10(1)(d)-(f).
- The HB size criteria do not change. HB reg 21(3)(b)-(c) and the reg 2(1) "qualifying parent or carer" speak of a child "placed ... prior to adoption" or "placed for adoption", with no definition of adopter.

`review_finding` (paste as-is; it adds to step 1's and step 2's):

> Para 12(4)(b) "adopter" takes reg 2's meaning, which is reg 89(3)(a): a person matched with a child for adoption who is, or is intended to be, the responsible carer, excluding a foster parent or close relative (reg 2) of the child. Take whether the person with whom the child is placed is a foster parent or close relative of that child as an input. Such a person does not satisfy the foster parent condition through that placement; they still satisfy it under (4)(a) or (5) if they are a foster parent of another child or within 12 months of a placement ending or of approval. Para 29(9A) reads para 12(4), so the same person under 35 is excepted only through (4)(a) or (5). The exclusion does not reach reg 4A(1)(c): the child remains the renter's responsibility and is counted under para 10(1)(d)-(f).

### Companion tests

Period 2026. Each is a single renter whose child of 4 is placed for adoption with them, with no other members unless stated. Each figure is worked from the provisions above.

| Case | Foster parent condition | Para 12 count | Para 10 total | Excepted person (29(9A)) |
|---|---|---|---|---|
| Adopter 40, not a foster parent or close relative of the child | met (12(4)(b)) | 1 | 1 + 1 (child) + 1 = 3 | — |
| Adopter 40 who is the child's sister (a close relative, reg 2(a)) | not met: not an "adopter" (reg 89(3)(a)) | 0 | 1 + 1 (child, reg 4A(1)(c)) = 2 | — |
| Adopter 30 who is a close relative of the child | not met | 0 | 2 | not excepted under (9A) |
| Adopter 30 who is a close relative of the child and an approved foster parent whose last placement ended within 12 months | met (12(4)(a) with (5)) | 1 | 1 + 1 + 1 = 3 | excepted (9A) |

The HB size criteria are the same in all four cases: the child does not occupy the claimant's dwelling (HB reg 21(3)(c)), and the claimant is a qualifying parent or carer (reg 2(1)(a)) with one additional bedroom (13D(3A)(b)): 1 + 1 = 2.

Invariant to pin: setting the close-relative input changes only the foster parent condition and what follows from it (para 12(9)(b) and para 29(9A)). It lowers the para 12 count by at most one and leaves responsibility (reg 4A(1)(c)) and the HB size criteria unchanged.

No separately approved billed signed-encoder run exists for this work.


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Ready for hub review

Head: 983488065231c5eaa10850196c9df25cfb17d2e2 on branch claude/lha-placement-adopter-findings-v9sk0t (the session pins pushes to this name). Built from 1f3ce21a0. No PR is open on it, and I pushed to neither lha-nondep-children-foster-rooms nor lha-bedroom-young-people.

Commits:

  • 65cddf8c merges Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's d8c224979 as its own commit. Parents are 1f3ce21a0 and d8c224979.
  • 5445e798 keeps placed children out of the HB non-dependant readers.
  • c7f9dfa0 C2: Scottish CTR cases, docstring and property.
  • 02125f5d C1 and C3, plus the changelog.
  • 9931ec1f formatting.
  • a04bc25e updates two older properties that the merge broke.
  • 983488065 adds an explicit Hypothesis example.

Merge (12 conflicts)

Resolved as the brief says. LHA_allowed_bedrooms.py now keeps #2010's child_bedrooms as the arithmetic, and rooms_for_children is gone. bedrooms_for_children(benunit, period, own_child, other_child, counts_other_children) takes the own and other masks; other_child counts only where uc_non_dependants_counted holds. The formula keeps no_one_responsible (children and QYPs), the is_lha_foster_child exclusion, is_resolved_household_head and LHA_additional_bedrooms. LHA_additional_bedrooms's others now follow uc_non_dependants_counted.

HB is rebuilt on occupiers_total and max_(adult_units, 1), plus housing_benefit_LHA_additional_bedrooms. Both additional-bedroom variables no longer read is_household_head; I added them to OUTPUTS in test_household_head_agreement_properties.py.

Judgment call in the merge: #2010's HB couple test counted two claimant-or-partners as a couple. #2016's YAML case "An explicit single relationship stops the Housing Benefit couple rule" (review round 2) needs is_couple as well. So adult_units now halves only where sum(cp) == 2 & is_couple (housing_benefit_LHA_allowed_bedrooms.py:71-77).

Other readers the merge broke:

  • housing_benefit_has_non_dependant.py:30-38 and housing_benefit_severe_disability_premium_applies.py:46-51 now apply the placed test (HB reg 3(2)(c)). The new YAML case "A child placed with the claimant is not a Housing Benefit non-dependant" covers the first.
  • LHA_young_person_bedroom.yaml: the case of a looked-after QYP in a non-dependant's family now gives the carer the foster room, [2, 1] → [2, 2], categories [C, C].
  • The CTR scheme-selection property's reference now stops looked-after status at 18.
  • The sharers no-op property's bedroom check now covers only households with no child outside the head's family.
  • income_support.yaml had a trailing blank line, which I removed.

I read the other legacy-flag readers: housing_benefit_maintenance_disregard, meets_housing_benefit_additional_earnings_disregard_conditions, is_housing_benefit_benefit_cap_exempt_specified_benefit, housing_benefit_child_disability_premiums, housing_benefit_family_premium, num_relevant_children_for_housing_benefit_childcare and is_responsible_for_child_or_young_person_for_legacy_benefits. Each tests membership of the claimant's family or household. On reg 21(3) none should keep a placed child, so I changed none. I have not read their own provisions (Sch 5 para 47, Sch 4 para 17, reg 75F, Sch 3, reg 28), which the law file doesn't quote, so that conclusion is pending a reading of those texts.

C1

  • housing_benefit_LHA_allowed_bedrooms.py:51-64: in occupiers_total, own leaves out is_child_or_young_person_placed_with_family and others keeps it.
  • housing_benefit_LHA_additional_bedrooms.py: ~placed is dropped from other, which now reads ~liable_family and counts only on an is_liable_for_household_rent claim.
  • Comments are rewritten in both variables, the property docstring and the YAML header and cases.
  • The case at old line 262 is now [3, 2]. The adoption version is [3, 2]. The overnight-care version is HB [4, 3] with additional [1, 2].

New cases, each worked by hand in its comment:

  • The review's family through final HB, as a foster placement and as an adoption placement.
  • A looked-after young person of 17 in education placed with a non-dependant: HB [3, 2], UC [2, 2].
  • A child placed with a lodger: HB [3, 2], UC [1, 2].
  • A child placed with a joint tenant: HB [1, 2].
  • The host's own foster child stays the existing case "Foster children have no bedrooms of their own…" (2 rooms, carer room).

UC for the review's family: foster [2, 2], adoption [3, 3].

Figures differ from the review. No BRMA in the model's tables for 2024-2028 has £228.70 or £273.09 as an HB C or D rate (I searched every BRMA). I used Maidstone 2026 with rent £300 a week and a working daughter (£20,000, 35 hours), so the non-dependant deduction is £105.20 a week. HB is £8,889.92 at 3 rooms against £5,359.64 at 2, £3,530.28 more. The review had £2,308.28.

C2

No code change was needed: the merge closes it. is_child_or_young_person_for_council_tax_reduction reads the UC flag on Scotland's working-age branch.

New cases in council_tax_reduction_young_person.yaml:

  • Cases 11-12 (2025, Edinburgh): toggling is_placed_for_adoption leaves lone-parent status, the applicable amount (£4,786.60) and CTR (£286.40) unchanged. The review had £286.30 on the old stack. Case 12 also shows the legacy, HB and IS flags still leave the child out.
  • Case 13: the pension-age scheme leaves the child out.

The new property is invariant 7 in the CTR properties file.

I read council_tax_reduction_applicable_amount, is_council_tax_reduction_lone_parent, is_responsible_for_child_or_young_person_for_council_tax_reduction, council_tax_reduction_premiums (working_age_benefits_premiums: disability, enhanced, severe and carer premiums read is_single/is_couple, not children), council_tax_reduction_applicable_income (maintenance reads the CTR responsibility flag) and council_tax_reduction_pensioner_earnings_disregard (it reads is_lone_parent, but only on the pension-age route). None needed a fix.

I updated the docstring of is_child_or_young_person_for_council_tax_reduction, and removed the gap from is_placed_for_adoption and the body. Two known gaps remain: pre-2022 Scotland (SSI 2012/303 not read), and the model applies no working-age earnings disregard on Scotland's CTR route (the scheme text was not read).

C3

  • New household/demographic/adopter_is_foster_parent_or_close_relative.py (child-level, default false, reg 2 close-relative list).
  • lha_renter_meets_foster_parent_condition.py reads it only as placed_for_adoption & ~adopter_is_foster_parent_or_close_relative.
  • Para 29(9A) follows through is_lha_shared_accommodation_rate_specified_renter's excepted_foster_parent, which reads that variable. I confirmed this by reading the code. The YAML can't isolate it, because a responsible renter isn't a specified renter anyway, so the case asserts the condition.

Three YAML cases:

  • Close-relative adopter 40: UC 2 (one fewer), the child counted, HB 2.
  • Close-relative adopter 30: condition false, HB 2.
  • Close-relative adopter between placements: condition true, UC 3, HB 2.

The property is invariant 7 in the LHA properties file. I updated is_placed_for_adoption's documentation and judgment call 1.

Tests (at 9834880, or a04bc25 for the unchanged files)

  • YAML: 97 passed. By file: LHA_other_families 44, LHA_young_person_bedroom 11, LHA_claimant_composition 17, income_support 7, tax_free_childcare_qualifying_child 5, council_tax_reduction_young_person 13.
  • test_lha_bedroom_young_people_properties.py 7 passed, and the reference test passes again with the new example.
  • test_child_and_adult_definitions_properties.py 18 passed.
  • test_means_test_income_properties.py 2 passed.
  • test_rent_of_sharers_boarders_and_lodgers_properties.py 6 passed (1 failed before the fix in a04bc25e).
  • test_council_tax_reduction_young_person_properties.py 7 passed (1 failed before the fix).
  • test_household_head_agreement_properties.py 3 passed.
  • code_health 3,102 passed.
  • check_fix_pr.py on the final title and body against d8c224979..HEAD: PASS, 10 changed executable tests.
  • ruff format --check, check, and F811/F821: clean.
  • git diff --check 1f3ce21a0..HEAD flags only files the merge brought in from Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010 and main: lha_published_rates_sources.csv (CRLF), couple_carer_award.yaml, housing_benefit_family_premium.yaml, severe_disability_premium_joint_occupiers.yaml and care_to_learn_history.yaml. git diff --check d8c224979..HEAD is clean.

Differential

I generated 300 households (604 benefit units), Maidstone, 2025, with no placement, overnight-care or between-placements inputs and no children outside the head's family. Each household has a head family of 1-2 adults and up to 4 children aged 0-19, plus up to 2 adult-only sharer, boarder, lodger or non-dependant families. Both schemes' rooms match d8c224979 for every benefit unit: 0 differences.

Mutations (scratch worktree at the head)

All 8 were killed:

  • others drops placed: 7 YAML cases fail, 2 of 3 properties fail.
  • own keeps placed: 12 YAML cases fail, 3 of 3 properties fail.
  • ~placed back in the additional bedrooms: 1 YAML case fails. The properties survived at first (3 passed), so 983488065 adds an explicit example to the reference count. That example fails on the mutant and passes on the head.
  • Scotland's branch reads the legacy flag: 3 YAML cases fail, and the property fails.
  • New input dropped: 2 YAML cases fail, and the property fails.
  • Input applied to the HB carer: 2 YAML cases fail, and the property fails.
  • Input applied to UC responsibility: 3 YAML cases fail, and the property fails.
  • housing_benefit_has_non_dependant without the placed test: 1 YAML case fails.

Skipped

  • I did not rerun the Impact microsimulation (no dataset access). The body labels the old figures by commit and names which figures this head can move.
  • No full suite run: CI covers it.
  • I did not edit .github/test_outcome_allowlist.toml or shard_durations.toml. No test was renamed or removed.

Judgment calls

Hub documents are posted above: PR_TITLE.txt, PR_BODY.md, AXIOM_406_EXTENSION.md and AXIOM_411_EXTENSION.md. The body keeps <406 extension URL> and <411 extension URL> for you to fill in.


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.

Re-reviewed exact head 983488065231c5eaa10850196c9df25cfb17d2e2. C1, C2, C3 and A1 are resolved: the host's HB placement count, Scottish CTR responsibility and statutory UC adopter qualifier now have source-backed final-result checks, and the description correction has landed.

The actual description now reflects the adopted fixes and child-bound adopter input. The supplied extensions on rulespec-uk #406 and #411 were checked against the previously verified primary rules.

Review PARTIAL: 101 selected tests passed before the bounded runner timed out; 15 selected checks remain unfinished, and there are no hosted checks at this head. The close-relative control also passed through final UC and household net income.

This head still contains the older #2010 parent rather than its latest 2d362d2 fix. Approval remains withheld pending parent integration and required checks on the resulting head. The prior findings are closed; this does not approve a future integration tree.

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

Program review

Base repository: PolicyEngine/policyengine-uk
PR number: 2016
Reviewed head SHA: 9834880
Merge base SHA: d8c2249
Mode: incremental from 9834880
Scope: Unchanged raw head; reassess retargeted main integration and preserve prior finding/test dispositions. No new statutory-logic review.
Source manifest: /privatepr-2016-sweep20261109-1229-review-sources.json
Review status: PARTIAL

Source Documents

Critical

C1 — Count a non-dependant's adoption placement in the host's HB rooms (RESOLVED)

Severity: CRITICAL (historical); Status: RESOLVED. housing_benefit_LHA_allowed_bedrooms now excludes a placement only from the applicant family's own occupiers and includes placements belonging to other non-rent-liable families in a liable claimant's occupiers. The own/other masks do not double-count the liable claimant's family, while the other family's own exclusion and carer room remain intact. The passing native YAML case has a private-renting head aged 60, a non-dependant daughter aged 32 earning £20,000, and her six-year-old adoption placement. It calculates host/daughter rooms [3,2] and final HB [£8,889.92,£0], with £15,600 Maidstone rent and the daughter's actual non-dependant deduction. The analogous foster case also passes. These use the present head's model amounts; they are not a claim that the prior counterexample's different earnings/rate context must retain its old award. The prior claimant-relative regulation 21(3)/13D source premise is unchanged and independently corroborated by the source role.

C2 — Preserve adopted-child responsibility in Scottish working-age CTR (RESOLVED)

Severity: CRITICAL (historical); Status: RESOLVED. The scheme-specific CTR child flag takes the UC responsibility branch for Scottish working-age claims from 2022, retaining a normally resident adoption-placement child while leaving the applicable old-scheme and pensioner exclusions separate. The paired 2025 actual-input cases (23-year-old adopter, child aged three, £11,000 earnings, £1,800 council tax, no UC) both retain lone-parent status and calculate final CTR £286.40, with applicable amount £4,786.60 and income £12,354.60. Both cases passed; the new adoption flag no longer causes the prior responsibility/allowance loss. The source role also confirms the pre-2022 exclusion under the earlier Scottish regulation, so this resolution does not backdate the 2021 rule. No certification of the shared route's entire allowance schedule is implied.

C3 — Apply the statutory adopter definition to the extra UC bedroom (RESOLVED)

Severity: CRITICAL (historical); Status: RESOLVED. The new Person-level adopter_is_foster_parent_or_close_relative input, supplied on the placed child, removes that placement from the UC adopter/foster-room route without changing general placement or child responsibility. Independent fostering/between-placement qualifications still work, and the input is inert without an adoption placement. Passing YAML includes unrelated-adopter, close-relative negative, under-35 and independently approved-foster-parent controls.

One uncovered final-money path was checked in a separate bounded native process: two actual 2026 private-renting adopter households, adult 40/child four, £18,000 earnings at 30 hours, £15,600 rent in Maidstone, no savings, UC claimed, and no independent foster/between-placement/overnight-care condition. Matched agency placement is supplied under the placement input's contract; only the actual close-relative qualification differs. There is no eligibility, room, cap or award input override. Both claims are eligible and paid, with no benefit-cap reduction. The unrelated adopter receives three rooms, UC housing £14,400 and final UC £16,900.50/HNI £35,718.50; the statutorily excluded close-relative adopter receives two rooms, housing £10,860 and UC £13,360.50/HNI £32,178.50. The £3,540 consequence follows only the lawful additional-room distinction; the child remains the adopter's responsibility in both. Inputs/outputs (retained review artifact), diagnostic (retained review artifact), log (retained review artifact). This diagnostic passed in 3.80 seconds, exit 0.

Should Address

A1 — Refresh the description to match the adopted placement fixes (RESOLVED)

Severity: SHOULD ADDRESS. Status: RESOLVED. The actual new publication-guard body remains bound to head 9834880 and now describes the claimant-relative HB occupier/overnight-care mask, the Scottish working-age adoption responsibility branch from 2022, and the statutory UC adopter exclusion. It lists adopter_is_foster_parent_or_close_relative as a child-level input and removes the old statements that those fixes are unimplemented. Current test figures are labelled by head, and old population estimates are explicitly historical with no new run claimed. The new axiomatic line links actual406/411 extension comments. The original clarity issue is resolved; author test or impact claims are not substituted for independent validation.

Suggestions

None.

Evidence Gaps

  • MAIN_INTEGRATION: No reviewed integration with captured main0520d96467724adf6b71b700fb099f94e5ee8049 exists. Read-only merge-tree reports four content conflicts; an actual conflict-resolved child head and affected checks are required before assessing the combined behavior.
  • LOCAL_REGRESSION_COMPLETION: The prior same-raw-head campaign completed101 of116 selected outcomes before its540-second timeout;15 named outcomes remain uncompleted. Current onlyFix-evidence success is not full-suite or Test/Result evidence.

Notes

  • Raw head unchanged; incremental code diff empty. Prior C1/C2/C3/A1 resolutions remain valid for that raw head, and do not certify eventual integration.
  • Parents #2007 and #2010 are merged. Captured main0520contains2010head4bb/mergefdc; child983containsneither. FourLHAparameter/formula/property conflicts require a new integrated child head and affected checks.
  • Retarget-only scope: no new policy/source interpretation.44cached original sources andderivatives werehashvalidated;0fresh acquisition orrendering.
  • Historical101passes of116outcomes and2householdnativewitnesses remainhistorical;15unfinishedoutcomes remaingaps. No new tests/models/install/sync/commits/PRmerges.
  • PR API baseRefOidfdc differs from liveGitmain0520; live-ref guard independently confirmed the captured base and is repeated before publication. This named identity resolution is included in consolidation time.

Validation Summary

Read-only merge-tree of child983488 and main0520d964 exited1 with4contentconflicts; no tracked/index/branch/commit changes. CurrentexactheadCIonlyFixevidence success129148741266, nofullTest/Result. Historical101/116selectedoutcomes+2householdnativeproof retained;15unfinishednodes explicitlylisted inreview-validation.json.1codereviewer,40technicalmembers,44cachedoriginalsources,0freshsources/renders/tests/models.

Timing

setup seconds: 322.12s; parallel review seconds: 226.29s; policy role seconds: 0.00s; code role seconds: 226.29s; adjudication seconds: 85.70s; consolidation cleanup seconds: 238.14s; elapsed seconds: 786.87s

Review Severity

COMMENT. Open findings: 0 critical, 0 should address, 0 suggestions.

MaxGhenis and others added 5 commits November 10, 2026 15:26
Merges main at 117e674. Four files conflicted:

- shared_accommodation_exception_benefits.yaml takes main's version.
  Main's list reads uc_receives_attendance_allowance, which counts armed
  forces independence payment, and its description names the Scottish
  heads of para 29(5): the two changes this branch made to the file.
- lha_renter_has_non_dependant.py takes main's description of other
  families' non-dependants and keeps this branch's sentence on children
  placed as foster children or for adoption. The formula merged without
  conflict.
- LHA_allowed_bedrooms.py keeps this branch's bedrooms_for_children. A
  new helper, other_family_non_dependants, holds main's count of other
  families' non-dependants: main's is_uc_non_dependant_of_household_head
  and main's in-unit non-dependants of a family that makes no Universal
  Credit claim of its own. The family's own non-dependants are main's
  is_benefit_unit_non_dependant_for_universal_credit less this branch's
  foster children.
- test_lha_bedroom_young_people_properties.py numbers the invariants 1
  to 9: this branch's seven, then main's invariants on contributions and
  on coding as 8 and 9. The exact-effect and reference tests take in
  main's in-unit non-dependant whose own family makes no claim.

The next commit brings this branch's foster children and
LHA_additional_bedrooms into line with main's Universal Credit
non-dependants. Until then the test's in_unit_non_dependants check fails
for a fostered person aged 16 or 17 who is not a qualifying young
person, whom main's is_benefit_unit_non_dependant_for_universal_credit
marks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The merge of main brought is_benefit_unit_non_dependant_for_universal_credit,
which gives an in-unit non-dependant's bedroom and housing cost
contribution one definition, and is_uc_non_dependant_of_household_head,
which leaves a boarder's or lodger's children out of the renter's
extended benefit unit (UC Regs 2013 Sch 4 para 9(2)(g)). This commit
brings this branch's foster children and additional bedrooms into line
with them.

- is_benefit_unit_non_dependant_for_universal_credit leaves out the
  claimant's or partner's foster child (is_lha_foster_child; para 9(2)(c)
  and (3)), so LHA_allowed_bedrooms reads it as main does.
- other_family_non_dependants passes a foster child aged 16 or 17 who is
  not a qualifying young person to the claim that counts the household's
  non-dependants, unless that claim is the foster family's. Para 9(2)(c)
  takes them out of their foster parent's extended benefit unit only.
  Being under 21, they owe no housing cost contribution (para 16(2)(a)).
- LHA_additional_bedrooms reads other_family_non_dependants. It read
  is_non_dependant_of_household_head, which since main's change also
  marks a boarder's or lodger's children, and so gave the counting claim
  an overnight care room for them.
- is_non_dependant_of_household_head's description no longer says that
  the flag covers every member of a family: main's formula leaves out a
  boarder's or lodger's payer and partner.
- The property tests expect the foster child's bedroom, and the overnight
  care room of anyone passed on, in the claim that counts the household's
  non-dependants.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main changed two results that this branch's YAML cases expected, and the
merge kept the old expectations.

- In LHA_other_families_children_and_additional_bedrooms.yaml,
  is_non_dependant_of_household_head now marks a lodger's child who pays
  nothing. The lodger pays the householder on a commercial basis, so HB
  Regs 2006 reg 3(2)(e)(i) leaves the lodger out of the householder's
  non-dependants, but no exception in reg 3(2) covers the lodger's
  child. The case now expects true for the child, and it adds
  is_uc_non_dependant_of_household_head, which leaves the child out (UC
  Regs 2013 Sch 4 para 9(2)(g)). The case's other outputs stand.
- In council_tax_reduction_young_person.yaml, Cases 11 and 12 now take
  Scotland's working-age route. A lone parent's personal allowance and
  child premium at the 2025-26 rates give an applicable amount of
  (92.05 + 105.85) * 52 = 10,290.80. The £25 a week earnings disregard
  leaves income of 11,000 - 25 * 52 = 9,700, and income below the
  applicable amount gives the whole £1,800 of council tax.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Invariant 3 of test_claimant_not_own_child_properties.py restates the
CTC and Pension Credit child tests, which leave out a child whom a local
authority looks after. This branch's is_looked_after_child reads the
flag only for a person under 18, since a local authority can look after
only a child (Children Act 1989 s.105(1)), and both child tests read it.
The restatement still read the raw flag, so it expected CTC to leave out
an 18-year-old with the flag in approved training, whom the model counts
as a qualifying young person. The restatement now reads the flag only
under 18, and the test adds that 18-year-old as a fixed example.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Invariant 9 of test_lha_bedroom_young_people_properties.py says that
moving a non-claiming adult aged 20 or over out of their family's
benefit unit changes no claim. That fails where the family makes its own
claim and another family's claim counts the household's non-dependants.
In the family, the adult is the family's non-dependant, and the family's
claim bears their bedroom and contribution (invariant 8). In a benefit
unit of their own, the adult is a non-dependant of the household, and
the counting claim bears them. For example, where a sharer's family
claims beside the household head's, moving an adult out of the sharer's
family moves a bedroom and a housing cost contribution from the sharer's
claim to the head's. Main's model gives the same results for that case,
so main's version of the invariant fails on it too.

The invariant now expects that one bedroom to move, from the family's
claim to the counting claim, and every other claim to keep its bedrooms,
contribution and award. The test adds the sharer case as a fixed
example.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review November 10, 2026 22:47

@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
Reviewed head: 2f42ce1afeadb1d320a8db61d03931c60dc497c0

C4 — Include the new other-family non-dependants in the shared-accommodation-rate exception. lha_renter_has_non_dependant.py:51–58 still uses the narrower household-head flag. The new room-count helper can count a sharer’s fostered 16/17-year-old non-QYP for the renter while that flag remains false. Under UC Schedule 4, paragraphs 9 and 27–28, a legal non-dependant rules out the shared rate.

The executed 2026 case has a single 30-year-old private renter in Maidstone, a rent-liable 40-year-old foster-parent sharer earning £60,000 and not claiming UC, and their looked-after 17-year-old non-QYP who pays no rent and makes no claim. Only the head claims UC. The model gives the head two rooms but category A/shared, housing £5,337.96 and final UC £10,436.76. A diagnostic control that only reuses the new other-family helper in the shared-rate flag gives category C, housing £10,860 and final UC £14,753. The final UC loss is £4,316.24; the benefit cap explains why this is smaller than the housing-element difference. No eligibility or benefit amount was forced. Please align the non-dependant definitions and cover this route through the final award. This control diagnoses the cause; it is not a tracked fix or certification of every award component.

Prior C1–C3 and A1 remain resolved. The merged head resolves the previous four-conflict topology, and the fresh adopter pair passes through final UC and household net income. The source review is complete using 48 validated originals and 39 extracts, with no new acquisition. Queued RuleSpec work remains queued, rather than executed parity.

Remaining validation gap: the single 420-second repository campaign passed five Python tests with no failed assertion, then timed out. Seventy of 75 collected tests remain unfinished, including ten of the previous fifteen checkpoint selections; the named ledger is retained in the full report. Historical 101 passes are not presented as current integration evidence. Hosted exact-head CI is still pending. Changes are requested for confirmed C4; the incomplete regression evidence also prevents a complete review or approval.

@github-actions

github-actions Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base 3cf10f8c73 against head 92fdb9b9ab, both on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.1, sha256 056e80fd8e91), fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in report_spec.yaml; a flag does not fail the job).

Workflow run and full report

Notes

  • In the years a figure from fewer than 10 records is suppressed (spending.disabled_students_allowance), every total containing it, and the decile incomes, are rebuilt from their other components, so no published total includes it. Those totals are marked †. A change is withheld where the two sides leave out different figures and can't be lined up.

Moves flagged for review

None.

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Universal Credit +£2.2m +£2.2m +£2.2m +£2.2m +£2.2m +£2.2m +£2.2m
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Government balance, each component counted once

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government spending +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m †
Government balance, each receipt once -£2.2m † -£2.2m † -£2.2m † -£2.2m † -£2.2m † -£2.2m † -£2.2m †

Model totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_spending +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m †
household_benefits +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m †
gov_balance -£2.2m † -£2.2m † -£2.2m † -£2.2m † -£2.2m † -£2.2m † -£2.2m †

Household income totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household net income +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m † +£2.2m †
Household net income (HBAI definition) +£2.2m +£2.2m +£2.2m +£2.2m +£2.2m +£2.2m +£2.2m

Poverty rates

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, after housing costs: everyone -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Absolute poverty, after housing costs: children -0.01pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Absolute poverty, after housing costs: working-age adults -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Relative poverty, after housing costs: everyone -0.00pp -0.00pp 0 0 0 0 0
Relative poverty, after housing costs: children -0.01pp -0.00pp 0 0 0 0 0
Relative poverty, after housing costs: working-age adults -0.00pp -0.00pp 0 0 0 0 0

People in poverty

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, after housing costs: everyone -2.5k -1.2k -1.2k -1.3k -1.3k -1.3k -1.3k
Absolute poverty, after housing costs: children -829 -416 -416 -417 -418 -419 -420
Absolute poverty, after housing costs: working-age adults -1.7k -831 -832 -834 -835 -838 -840
Relative poverty, after housing costs: everyone -2.5k -1.2k 0 0 0 0 0
Relative poverty, after housing costs: children -829 -416 0 0 0 0 0
Relative poverty, after housing costs: working-age adults -1.7k -831 0 0 0 0 0

Inequality

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000

Mean household net income in each side's own deciles

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household +£0.27 † +£0.27 † +£0.27 † +£0.27 † +£0.27 † +£0.27 † +£0.27 †
Decile 2: mean household_net_income per household -£19 † -£1.38 † -£2.49 † -£1.65 † -£1.69 † -£1.69 † -£3.15 †
Decile 3: mean household_net_income per household +£32 † +£0.66 † +£2.56 † +£0.75 † +£0.73 † +£0.72 † +£1.15 †

Standard reform costings (change in gov_balance)

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp -£0 0 +£0 0 -£0 -£0 -£0
Raise higher rate by 1pp -£0 0 +£0 -£0 0 -£0 -£0
Raise personal allowance by ~800GBP/year -£0 0 +£0 -£0 -£0 -£0 -£0
Raise child benefit by 25GBP/week per additional child -£0 +£0 +£0 -£0 0 -£0 -£0
Reduce Universal Credit taper rate to 20% 0 -£0 +£0 0 +£1 -£0 -£0
Raise Class 1 main employee NICs rate to 10% 0 +£0 +£0 0 -£0 -£0 -£0
Raise VAT standard rate by 2pp 0 -£1 +£0 0 0 -£0 -£0
Raise additional rate by 3pp -£0 0 +£0 -£0 -£0 -£0 -£0
Raise the Universal Credit standard allowance by 10% 0 +£0 +£0 0 -£0 -£0 -£0
Raise the State Pension by 10% 0 0 +£0 -£0 0 0 -£0

Standard reforms: change in each reform's target

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Reduce Universal Credit taper rate to 20%: change in universal_credit 0 +£0 -£0 -£0 -£0 0 +£0
Raise the Universal Credit standard allowance by 10%: change in universal_credit +£0 -£0 +£1 -£1 +£1 +£1 +£0

Household net income by decile

Mean change in household net income per household, and as a share of the decile's base income; households stay in the base run's deciles.

Base decile 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1 fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change
Decile 2 fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change
Decile 3 fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change
Decile 4 0 0 0 0 0 0 0
Decile 5 0 0 0 0 0 0 0
Decile 6 0 0 0 0 0 0 0
Decile 7 0 0 0 0 0 0 0
Decile 8 0 0 0 0 0 0 0
Decile 9 0 0 0 0 0 0 0
Decile 10 0 0 0 0 0 0 0
all fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change
Year People gaining over £1 People losing over £1
2025-26 fewer than 10 households change fewer than 10 households change
2026-27 fewer than 10 households change fewer than 10 households change
2027-28 fewer than 10 households change fewer than 10 households change
2028-29 fewer than 10 households change fewer than 10 households change
2029-30 fewer than 10 households change fewer than 10 households change
2030-31 fewer than 10 households change fewer than 10 households change
2031-32 fewer than 10 households change fewer than 10 households change

No change in any year: receipts by tax head; population.

Checks failing on both base and head (1)
  • VAT excluding private school fees is never negative (sign:vat): 2025-26: 76 units below zero, a weighted £-52,314,332 in total; 2026-27: 76 units below zero, a weighted £-54,150,722 in total; 2027-28: 76 units below zero, a weighted £-56,043,426 in total
Counted-once check

The check raised each of 92 components by £1 per unit in 2026-27 and read every head of its totals household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A response that is not finite breaks every rule. The check measures a head that breaks a rule twice more: once holding every other head at its baseline value, and once holding every other head at its value after the first £1 while the component rises again. The head fails where either measurement still shows the response. The check cannot hold a head at a value that is not finite. In each unit where another head is not finite after the first £1, it holds that head at its baseline value, and the second measurement judges no household the unit belongs to. There a head fails wherever it first broke a rule, or wherever the check could not confirm whether its response contains the component. 0 failed and the check skipped 0.

  • widowed_parents_allowance: pension_credit responds only through other heads in fewer than 10 households (other heads that moved there: carers_allowance; gov_spending; not a failure)
  • widowed_parents_allowance: pension_credit responds only through other heads in fewer than 10 households (other heads that moved there: carers_allowance; household_benefits; not a failure)
Provenance
Side Commit Runtime Environment hash Partition hash Time
base main 3cf10f8c73 uk 2.178.0 (files f4e0bb852c4b), core 3.34.9, py 3.13.18 aarch64 488338f20cf7 f5dab8526157 2738.36s
head #2016 merged into main 92fdb9b9ab uk 2.178.0 (files 3cd28146a9c7), core 3.34.9, py 3.13.18 aarch64 488338f20cf7 f5dab8526157 2766.67s

Dataset: hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@2526edbbb687a3b54dbb11272e5389e4b62d2ac2, sha256 056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784 (verified on both sides), policyengine-uk-data 1.58.1.

Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Final charge on cash interest in non-cash ISAs £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Lifetime ISA withdrawal charge £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Income tax £294.44bn £315.20bn £335.79bn £351.25bn £366.92bn £385.31bn £399.96bn
National Insurance (employee and self-employed) £51.70bn £54.14bn £56.13bn £57.73bn £59.76bn £61.64bn £63.51bn
National Insurance (employer) £148.71bn £155.37bn £160.88bn £165.09bn £172.06bn £177.36bn £182.57bn
Employer NI change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employer NI change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Capital gains tax £12.60bn £13.15bn £13.60bn £14.11bn £14.67bn £15.24bn £15.80bn
Student loan repayments £7.82bn £8.13bn £8.39bn £8.58bn £8.79bn £9.04bn £9.29bn
VAT excluding private school fees £242.22bn £249.47bn £258.67bn £264.86bn £270.95bn £277.04bn £283.21bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £1.95bn £2.01bn £2.09bn £2.14bn £2.20bn £2.26bn £2.31bn
Change in private school VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.71bn £24.13bn £26.00bn £26.83bn £26.51bn £25.78bn £24.63bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Betting and gaming duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.26bn £4.40bn £4.41bn £4.42bn £4.43bn £4.44bn £4.45bn
Council tax £49.21bn £52.16bn £54.89bn £57.95bn £61.16bn £64.47bn £67.91bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.48bn £0.49bn £0.50bn £0.51bn
Northern Ireland domestic rates £0.55bn £0.58bn £0.60bn £0.63bn £0.66bn £0.69bn £0.72bn
Business rates £34.68bn £36.20bn £38.00bn £39.46bn £42.27bn £43.25bn £44.29bn
Stamp duty land tax on the household's own purchases £6.88bn £7.32bn £7.66bn £8.06bn £8.47bn £8.91bn £9.35bn
Stamp duty land tax paid by companies £4.72bn £4.57bn £5.29bn £6.03bn £6.37bn £6.92bn £7.45bn
Land transaction tax (Wales) £0.07bn £0.08bn £0.08bn £0.09bn £0.10bn £0.10bn £0.11bn
Land and buildings transaction tax (Scotland) £0.31bn £0.32bn £0.33bn £0.35bn £0.36bn £0.38bn £0.40bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Lifetime ISA bonus £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
State Pension £121.68bn £125.92bn £126.72bn £129.48bn £132.98bn £136.65bn £140.41bn
Pension Credit £6.21bn £6.46bn £6.68bn £6.82bn £6.89bn £7.07bn £7.22bn
Winter Fuel Payment £1.86bn £1.85bn £1.79bn £1.77bn £1.78bn £1.78bn £1.78bn
Pension Age Winter Heating Payment (Scotland) £0.19bn £0.20bn £0.20bn £0.21bn £0.21bn £0.22bn £0.22bn
Universal Credit £75.71bn £81.81bn £84.29bn £86.34bn £87.51bn £89.06bn £89.70bn
Housing Benefit £8.57bn £8.52bn £8.85bn £9.06bn £9.29bn £9.57bn £9.84bn
Council Tax Reduction £2.19bn £2.32bn £2.44bn £2.58bn £2.72bn £2.87bn £3.02bn
Employment and Support Allowance (income-related) £0.79bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employment and Support Allowance (contribution-based) £5.20bn £5.37bn £5.56bn £5.69bn £5.82bn £5.95bn £6.09bn
Jobseeker's Allowance (income-based) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.29bn £0.30bn £0.31bn £0.31bn £0.32bn £0.33bn £0.34bn
Income Support £0.11bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Working Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Incapacity Benefit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Personal Independence Payment £26.95bn £28.03bn £29.05bn £30.09bn £30.75bn £31.51bn £32.21bn
Disability Living Allowance £7.49bn £7.79bn £8.07bn £8.36bn £8.55bn £8.76bn £8.95bn
Attendance Allowance £8.68bn £9.03bn £9.36bn £9.69bn £9.90bn £10.15bn £10.38bn
Carer's Allowance £4.48bn £4.66bn £4.83bn £5.00bn £5.11bn £5.27bn £5.42bn
Carer Support Payment (Scotland) £0.31bn £0.32bn £0.33bn £0.34bn £0.35bn £0.36bn £0.37bn
Scottish Carer Supplement £0.00bn £0.04bn £0.04bn £0.05bn £0.05bn £0.05bn £0.05bn
Severe Disablement Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
Industrial Injuries Disablement Benefit £0.50bn £0.52bn £0.54bn £0.55bn £0.56bn £0.58bn £0.59bn
Armed Forces Compensation Scheme £0.61bn £0.63bn £0.65bn £0.66bn £0.68bn £0.69bn £0.71bn
War Widow's or Widower's Pension £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Benefit £16.19bn £16.82bn £17.39bn £18.00bn £18.39bn £18.84bn £19.25bn
Scottish Child Payment £0.49bn £0.52bn £0.53bn £0.55bn £0.56bn £0.57bn £0.56bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.30bn £3.41bn £3.54bn £3.62bn £3.70bn £3.78bn £3.87bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £1.12bn £1.16bn £1.20bn £1.23bn £1.26bn £1.29bn £1.32bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £0.67bn £0.69bn £0.71bn £0.73bn £0.75bn £0.76bn £0.78bn
Widowed Parent's Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tax-Free Childcare £0.56bn £0.57bn £0.57bn £0.58bn £0.60bn £0.61bn £0.59bn
Extended childcare entitlement £2.99bn £3.50bn £3.59bn £3.71bn £3.78bn £3.86bn £3.93bn
Universal childcare entitlement £2.06bn £2.22bn £2.29bn £2.37bn £2.43bn £2.48bn £2.53bn
Targeted childcare entitlement £0.50bn £0.51bn £0.52bn £0.54bn £0.55bn £0.57bn £0.56bn
Childcare Offer for Wales £0.26bn £0.28bn £0.28bn £0.29bn £0.30bn £0.31bn £0.32bn
Care to Learn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Childcare Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Parents' Learning Allowance £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn
Adult Dependants' Grant £0.06bn £0.06bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Travel Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
NHS spending £203.89bn £204.30bn £204.56bn £204.91bn £205.34bn £205.85bn £206.35bn
State education spending £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Transport subsidy spending £25.05bn £25.10bn £25.14bn £25.18bn £25.23bn £25.30bn £25.36bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Household Energy Payment £0.00bn £2.11bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Lifetime ISA bonus 0k 0k 0k 0k 0k 0k 0k
State Pension 11,264k 11,145k 10,819k 10,700k 10,723k 10,750k 10,776k
Pension Credit 1,489k 1,484k 1,476k 1,454k 1,452k 1,457k 1,466k
Winter Fuel Payment 7,844k 7,783k 7,473k 7,375k 7,391k 7,409k 7,427k
Pension Age Winter Heating Payment (Scotland) 803k 802k 800k 797k 799k 801k 802k
Universal Credit 6,343k 6,419k 6,408k 6,369k 6,364k 6,343k 6,295k
Housing Benefit 1,249k 1,182k 1,181k 1,165k 1,164k 1,166k 1,168k
Council Tax Reduction 3,326k 3,344k 3,351k 3,364k 3,376k 3,388k 3,395k
Employment and Support Allowance (income-related) 71k 0k 0k 0k 0k 0k 0k
Employment and Support Allowance (contribution-based) 719k 720k 721k 722k 724k 726k 728k
Jobseeker's Allowance (income-based) 0k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 67k 67k 67k 67k 67k 68k 68k
Income Support 25k 0k 0k 0k 0k 0k 0k
Working Tax Credit 0k 0k 0k 0k 0k 0k 0k
Child Tax Credit 0k 0k 0k 0k 0k 0k 0k
Incapacity Benefit 0k 0k 0k 0k 0k 0k 0k
Personal Independence Payment 3,567k 3,575k 3,579k 3,585k 3,593k 3,602k 3,611k
Disability Living Allowance 1,291k 1,294k 1,296k 1,298k 1,300k 1,304k 1,307k
Attendance Allowance 1,695k 1,698k 1,700k 1,703k 1,707k 1,711k 1,715k
Carer's Allowance 1,034k 1,037k 1,038k 1,040k 1,042k 1,060k 1,062k
Carer Support Payment (Scotland) 71k 71k 71k 72k 72k 72k 72k
Scottish Carer Supplement 0k 71k 71k 72k 72k 72k 72k
Severe Disablement Allowance 4k 4k 4k 4k 4k 4k 4k
Industrial Injuries Disablement Benefit 137k 137k 137k 138k 138k 138k 139k
Armed Forces Compensation Scheme 93k 93k 94k 94k 94k 94k 94k
War Widow's or Widower's Pension 0k 0k 0k 0k 0k 0k 0k
Child Benefit 8,123k 8,120k 8,120k 8,130k 8,145k 8,161k 8,178k
Scottish Child Payment 351k 352k 352k 353k 350k 348k 337k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 200k 200k 200k 201k 201k 201k 202k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 333k 333k 334k 334k 335k 336k 337k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 181k 182k 182k 182k 182k 183k 183k
Sure Start Maternity Grant 26k 26k 26k 26k 26k 26k 26k
Bereavement Support Payment 98k 98k 98k 98k 98k 99k 99k
Widowed Parent's Allowance 0k 0k 0k 0k 0k 0k 0k
Tax-Free Childcare 1,043k 1,027k 1,014k 1,009k 1,011k 1,009k 993k
Extended childcare entitlement 795k 800k 796k 797k 798k 798k 792k
Universal childcare entitlement 1,071k 1,072k 1,072k 1,073k 1,076k 1,079k 1,074k
Targeted childcare entitlement 165k 156k 154k 154k 155k 155k 150k
Childcare Offer for Wales 39k 39k 39k 39k 39k 39k 39k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 98k 98k 98k 99k 99k 99k 99k
Adult Dependants' Grant 18k 18k 12k 12k 12k 12k 12k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Household Energy Payment 0k 21,065k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £884.82bn £927.24bn £972.81bn £1,008.06bn £1,046.18bn £1,083.32bn £1,116.48bn
Government spending £529.29bn † £545.33bn † £550.40bn † £559.11bn † £566.74bn † £575.46bn † £583.06bn †
Government balance, each receipt once £355.53bn † £381.92bn † £422.42bn † £448.96bn † £479.44bn † £507.86bn † £533.41bn †
Benefits in household_benefits but not in gov_spending £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Model totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax £884.82bn £927.24bn £972.81bn £1,008.06bn £1,046.18bn £1,083.32bn £1,116.48bn
household_tax £491.95bn £520.39bn £551.18bn £575.97bn £600.96bn £626.65bn £648.38bn
pre_budget_change_household_tax £484.12bn £512.26bn £542.79bn £566.92bn £591.68bn £617.12bn £638.58bn
gov_spending £529.29bn † £545.33bn † £550.40bn † £559.11bn † £566.74bn † £575.46bn † £583.06bn †
household_benefits £529.29bn † £545.33bn † £550.40bn † £559.11bn † £566.74bn † £575.46bn † £583.06bn †
gov_balance £355.53bn † £381.92bn † £422.42bn † £448.96bn † £479.44bn † £507.86bn † £533.41bn †
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,637.96bn £1,702.77bn £1,757.35bn £1,806.41bn £1,855.97bn £1,912.43bn £1,970.44bn
Household net income £1,636.62bn † £1,687.51bn † £1,715.11bn † £1,747.12bn † £1,778.27bn † £1,816.57bn † £1,859.19bn †
Household net income (HBAI definition) £1,449.51bn £1,499.52bn £1,530.52bn £1,564.80bn £1,597.47bn £1,635.14bn £1,676.11bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,245k 69,383k 69,473k 69,592k 69,738k 69,912k 70,080k
Benefit units 35,110k 35,181k 35,226k 35,286k 35,360k 35,449k 35,534k
Households 31,046k 31,108k 31,149k 31,201k 31,267k 31,345k 31,420k
Poverty rates: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 16.2% 15.4% 16.3% 16.2% 16.4% 16.4% 16.5%
Absolute poverty, before housing costs: children 24.6% 21.9% 23.1% 22.7% 22.9% 23.0% 23.2%
Absolute poverty, before housing costs: working-age adults 14.0% 13.7% 14.6% 14.6% 14.7% 14.7% 14.9%
Absolute poverty, before housing costs: pensioners 13.7% 13.4% 14.0% 13.9% 14.0% 14.0% 13.9%
Absolute poverty, after housing costs: everyone 21.5% 21.0% 22.0% 22.5% 22.8% 23.0% 23.4%
Absolute poverty, after housing costs: children 33.1% 31.2% 32.1% 32.4% 32.8% 33.2% 34.0%
Absolute poverty, after housing costs: working-age adults 19.9% 19.8% 20.8% 21.5% 21.8% 22.0% 22.2%
Absolute poverty, after housing costs: pensioners 12.7% 12.4% 13.2% 13.2% 13.3% 13.4% 13.6%
Relative poverty, before housing costs: everyone 16.9% 15.9% 16.3% 16.2% 16.3% 16.2% 16.5%
Relative poverty, before housing costs: children 25.8% 22.6% 23.1% 22.7% 22.8% 22.6% 23.2%
Relative poverty, before housing costs: working-age adults 14.4% 14.0% 14.6% 14.6% 14.7% 14.6% 14.9%
Relative poverty, before housing costs: pensioners 14.5% 14.1% 14.0% 13.8% 13.8% 13.9% 13.9%
Relative poverty, after housing costs: everyone 21.4% 20.9% 21.2% 21.3% 21.3% 21.5% 21.7%
Relative poverty, after housing costs: children 32.9% 31.0% 31.1% 31.0% 31.1% 31.2% 31.7%
Relative poverty, after housing costs: working-age adults 19.8% 19.7% 20.2% 20.4% 20.5% 20.6% 20.8%
Relative poverty, after housing costs: pensioners 12.5% 12.4% 12.2% 11.8% 11.7% 11.8% 12.1%
People in poverty: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 11,251k 10,708k 11,337k 11,302k 11,412k 11,452k 11,588k
Absolute poverty, before housing costs: children 3,677k 3,272k 3,456k 3,407k 3,443k 3,465k 3,511k
Absolute poverty, before housing costs: working-age adults 5,950k 5,860k 6,279k 6,333k 6,390k 6,402k 6,493k
Absolute poverty, before housing costs: pensioners 1,624k 1,576k 1,602k 1,562k 1,579k 1,585k 1,584k
Absolute poverty, after housing costs: everyone 14,869k 14,565k 15,263k 15,690k 15,910k 16,094k 16,373k
Absolute poverty, after housing costs: children 4,940k 4,671k 4,814k 4,873k 4,931k 5,015k 5,145k
Absolute poverty, after housing costs: working-age adults 8,424k 8,435k 8,943k 9,324k 9,474k 9,559k 9,683k
Absolute poverty, after housing costs: pensioners 1,504k 1,460k 1,505k 1,493k 1,505k 1,520k 1,545k
Relative poverty, before housing costs: everyone 11,698k 11,036k 11,323k 11,301k 11,352k 11,354k 11,588k
Relative poverty, before housing costs: children 3,849k 3,391k 3,456k 3,407k 3,429k 3,416k 3,511k
Relative poverty, before housing costs: working-age adults 6,131k 5,993k 6,272k 6,333k 6,359k 6,362k 6,493k
Relative poverty, before housing costs: pensioners 1,719k 1,652k 1,594k 1,561k 1,565k 1,576k 1,584k
Relative poverty, after housing costs: everyone 14,800k 14,518k 14,761k 14,796k 14,871k 15,007k 15,219k
Relative poverty, after housing costs: children 4,916k 4,649k 4,663k 4,653k 4,675k 4,703k 4,798k
Relative poverty, after housing costs: working-age adults 8,396k 8,414k 8,702k 8,816k 8,873k 8,962k 9,052k
Relative poverty, after housing costs: pensioners 1,488k 1,455k 1,395k 1,326k 1,324k 1,342k 1,369k
Inequality: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs 0.3077 0.3049 0.3055 0.3054 0.3059 0.3064 0.3080
Mean household net income in each side's own deciles: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household £17,748 † £17,980 † £17,927 † £18,181 † £18,317 † £18,538 † £18,742 †
Decile 2: mean household_net_income per household £28,029 † £29,037 † £28,754 † £28,997 † £29,258 † £29,676 † £30,171 †
Decile 3: mean household_net_income per household £34,252 † £35,425 † £36,069 † £36,547 † £37,156 † £37,774 † £38,103 †
Decile 4: mean household_net_income per household £38,926 † £40,769 † £41,716 † £42,763 † £43,387 † £44,167 † £44,499 †
Decile 5: mean household_net_income per household £43,346 † £45,603 † £46,054 † £47,001 † £47,756 † £48,627 † £50,309 †
Decile 6: mean household_net_income per household £47,936 † £49,179 † £50,883 † £52,036 † £52,926 † £53,947 † £54,723 †
Decile 7: mean household_net_income per household £55,669 † £56,647 † £57,489 † £57,670 † £58,788 † £59,703 † £61,102 †
Decile 8: mean household_net_income per household £68,786 † £70,811 † £71,870 † £73,483 † £73,890 † £75,325 † £77,181 †
Decile 9: mean household_net_income per household £78,891 † £81,011 † £80,860 † £82,646 † £85,464 † £86,940 † £89,508 †
Decile 10: mean household_net_income per household £116,864 † £120,162 † £124,545 † £126,420 † £125,756 † £128,269 † £130,694 †
Standard reform costings (change in gov_balance): head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp £6.41bn £6.66bn £6.63bn £6.85bn £7.03bn £7.25bn £7.47bn
Raise higher rate by 1pp £3.61bn £3.87bn £4.00bn £4.22bn £4.44bn £4.71bn £4.83bn
Raise personal allowance by ~800GBP/year £-3.82bn £-3.93bn £-4.01bn £-4.05bn £-4.11bn £-4.24bn £-1.95bn
Raise child benefit by 25GBP/week per additional child £-1.99bn £-1.75bn £-1.55bn £-1.38bn £-1.30bn £-1.18bn £-1.07bn
Reduce Universal Credit taper rate to 20% £-20.83bn £-21.38bn £-21.81bn £-22.02bn £-22.37bn £-22.77bn £-22.96bn
Raise Class 1 main employee NICs rate to 10% £10.89bn £11.30bn £11.71bn £12.01bn £12.31bn £12.62bn £13.00bn
Raise VAT standard rate by 2pp £24.17bn £24.97bn £25.86bn £26.46bn £27.07bn £27.68bn £28.31bn
Raise additional rate by 3pp £2.90bn £3.15bn £3.22bn £3.41bn £3.61bn £3.85bn £4.14bn
Raise the Universal Credit standard allowance by 10% £-3.06bn £-3.23bn £-3.30bn £-3.40bn £-3.48bn £-3.53bn £-3.55bn
Raise the State Pension by 10% £-7.76bn £-7.99bn £-8.22bn £-8.44bn £-8.79bn £-8.52bn £-8.86bn
Standard reforms: change in each reform's target: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax £6.55bn £6.86bn £6.79bn £7.00bn £7.20bn £7.44bn £7.66bn
Raise higher rate by 1pp: change in income_tax £3.61bn £3.92bn £4.01bn £4.23bn £4.45bn £4.72bn £4.84bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.94bn £-4.07bn £-4.14bn £-4.18bn £-4.22bn £-4.40bn £-1.76bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.33bn £2.14bn £1.94bn £1.76bn £1.65bn £1.52bn £1.40bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £20.79bn £21.36bn £21.84bn £22.07bn £22.39bn £22.80bn £23.01bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £11.15bn £11.63bn £12.00bn £12.29bn £12.61bn £12.94bn £13.31bn
Raise VAT standard rate by 2pp: change in vat £23.98bn £24.77bn £25.66bn £26.24bn £26.85bn £27.46bn £28.07bn
Raise additional rate by 3pp: change in income_tax £2.90bn £3.15bn £3.22bn £3.42bn £3.62bn £3.86bn £4.12bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £3.06bn £3.22bn £3.32bn £3.41bn £3.48bn £3.54bn £3.55bn
Raise the State Pension by 10%: change in state_pension £10.68bn £11.17bn £11.28bn £11.60bn £12.03bn £12.46bn £12.96bn

MaxGhenis and others added 2 commits November 10, 2026 19:53
Finding C4. Under UC Regs 2013 Sch 4 para 28(4), a renter with a
non-dependant is not a specified renter, so para 27's shared
accommodation rate does not apply. LHA_allowed_bedrooms gives the claim
that counts the household's non-dependants a bedroom for each person in
other_family_non_dependants, but lha_renter_has_non_dependant read only
is_uc_non_dependant_of_household_head. It missed two groups the bedroom
count includes: main's in-unit non-dependants of a family that neither
claims nor counts the household's non-dependants, and this PR's foster
child aged 16 or 17 who is not a qualifying young person.

So a single renter under 35 could get a non-dependant's bedroom, and on
main bear their housing cost contribution, while keeping the shared
rate. In the C4 case, a non-claiming sharer fosters a looked-after
17-year-old not in education, and the renter of 30 in Maidstone gets
category A: a housing costs element of 5,337.96 and Universal Credit of
10,436.76 in 2026. Main gives the same category and amounts.

The flag's other-family part now reads other_family_non_dependants, so
the flag and the bedroom count name the same people. That case now gets
category C: a housing costs element of 10,860 and Universal Credit of
14,753 after the benefit cap. A non-claiming sharer's son of 22 in the
sharer's benefit unit moves the same way, from category A to C. The
flag's in-family part keeps its rules (#2030 splits it by scheme).

Tests: both cases through final Universal Credit, in
LHA_other_families_children_and_additional_bedrooms.yaml and
LHA_young_person_bedroom.yaml, and property 2 of
test_lha_bedroom_young_people_properties.py now also checks that a
counting claim that gains a bedroom from another family's person has a
non-dependant on the flag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Property 2's new check, that a counting claim which gains a bedroom from
another family's person has a non-dependant on
lha_renter_has_non_dependant, also passed with the flag as it stood at
2f42ce1: its 25 derandomized examples never reached either route. Two
explicit examples now cover them: a claiming sharer of 40 with a
looked-after 17-year-old not in education, and a sharer of 70, who makes
no Universal Credit claim, with a 19-year-old not in education. In each,
the head's claim gains the bedroom. With the flag at 2f42ce1, both
examples fail the check; at this commit, both pass.

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.

Review status: PARTIAL
Reviewed head: b460cf65bfb3020f9ad4a17c44fe307041d1fc17

C4 is resolved. The shared-rate flag now uses the same other-family non-dependant helper as the room count. The exact original review household now gives category C, housing £10,860, final UC £14,753 and household net income £58,230.40, without eligibility/award amount inputs or a diagnostic reform. C1–C3 remain resolved; no new code blocker was found.

This head advanced from e2f368 during review. Its only delta adds two explicit examples to the property test; all production, parameters, dependency lock and PR body are identical. The changed property passed again at this head in93.30seconds. Current evidence is61retained unchanged passing tests plus1updated passing test, covering the same62nodes—not63. The preceding focused62-test campaign passed in137.90seconds.

A1 is reopened (nonblocking): the description still calls 2f42 “this head” and describes the adopted SAR correction as a future follow-up. Please distinguish current behavior from historical validation.

The focused checks close45of the previous70unfinished outcomes.25remain, including9of the earlier10checkpoint selections; these remain a material validation gap. Hosted CI for this head is pending. The old90-minute cancellation belongs to 2f42, not this head. Policy/source checks remain complete with49validated originals and40extracts, with no new acquisition. Approval remains withheld for A1 and incomplete validation.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Thanks, @juaristi22. A1: I've posted the updated description, which I'd held while the tests ran.

  • Tests now start at b460cf6, the head. They list what ran at this head and what ran at 2f42ce1 and 9834880 separately, each under its own commit. The CI line says the run at b460cf6 is still going; I'll replace it with the result.
  • The known-gap bullet that called the shared rate's non-dependant flag a future follow-up is gone. The change now appears as Problem 4, as a bullet under "Main's Universal Credit non-dependants", as a check in property 2, and in "Commits after 9834880" (e2f368d and b460cf6).
  • Differential grid reruns at seven commits, with three new households whose head is 30. It also fixes an input error in the earlier grid, which set the claim on some benefit units only. Against main this head gives 35 differences, all from this PR: 27 at 2f42ce1 and 8 from the flag. In your case and in a non-claiming sharer's son of 22, the head goes from category A to C. Main gives category A in both.
  • Impact adds the shared-rate flag to the figures this head can move, since the earlier microsimulation runs predate it.

On the remaining validation gap, the hosted run at b460cf6 covers the full YAML suite and all eight Python shards. I'll post its counts here when it finishes.

@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
Reviewed head: b460cf65bfb3020f9ad4a17c44fe307041d1fc17

A1 is resolved. The updated description and author reply now describe the adopted shared-rate fix, remove the future-follow-up statement, and distinguish current-head testing from earlier commits. C1–C4 remain resolved. There are no remaining code, policy or description findings.

The code head is unchanged, so the completed code/native/test evidence remains applicable. I validated the retained49source originals and40extracts without new acquisition, model calculations or test executions. The new differential-grid figures and additional local-test counts remain attributed author claims; I did not independently rerun that grid or add those counts to verified coverage.

The review remains PARTIAL:25previously selected outcomes, including9checkpoint selections, still lack independent completion evidence in this review, and the current hosted suite remains pending. Approval is withheld until the material validation gaps are closed and the applicable required checks pass at this head.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

The hosted run at b460cf6 has finished. Every job in pr_code_changes.yaml passed (run 42936378851), and all 21 checks on this head pass. The run tests this head merged with main at 3cf10f8.

  • YAML: 6,659 passed, two more than at 2f42ce1: the two new cases.
  • Python, 8 shards: 13,394 passed, 61 skipped, 2 xfailed, with no failures. All three property modules ran (9, 7 and 3 tests), including property 2 with its two new examples.

The Python count exceeds 2f42ce1's because main's seven commits since that run's base added tests; this PR's later commits add no test functions. I've put these counts in the description's Tests section in place of the pending line.

@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: COMPLETE — approved at b460cf65bfb3020f9ad4a17c44fe307041d1fc17.

All prior findings C1–C4 and A1 are resolved, with no open findings or material evidence gaps. The retained policy/source, code and native final-result evidence remains applicable to this unchanged reviewed head.

The successful official CI run now closes both remaining validation gaps: all 25 previously unfinished outcomes and all 9 checkpoint selections pass. The full suite reports 6,659 YAML passes and 13,394 Python passes, with 61 allowlisted skips and 2 allowlisted expected failures. Every one of the 13,457 collected Python cases has exactly one recorded outcome; no failures, unexpected passes, missing outcomes or collection errors remain. All 21 current-head check contexts pass.

The official execution used synthetic merge 92fdb9b9ab33b9332dbd647170989af8fb6aa78d of this head into 3cf10f8c73275090fd2c86465d7b396c64b66702. Relevant test definitions match the reviewed versions; the frozen lock differs only in the local package release version, with dependency versions unchanged. The latest CI-only description update and author reply match these official results.

This follow-up uses the official outcomes and retained review evidence; it does not claim new local test execution or recertify historical population results. No further changes requested.

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.

LHA size criteria: other families' children, foster placements and the additional bedroom

3 participants