Repository navigation
Give benefit-unit members aged 16 or over a bedroom under LHA rules - #2010
Conversation
…ze criteria Universal Credit: a qualifying young person the renter is responsible for has a bedroom (UC Regs 2013 Sch 4 para 10(1)(b)), and any other member aged 16 or over is a non-dependant with one (para 9(2), 10(1)(c)), except a qualifying young person no one is responsible for (para 9(2)(g)). Housing Benefit: every member aged 16 or over other than the claimant or partner is a person who is not a child (HB Regs 2006 and HB (SPC) Regs 2006 reg 13D(3)(b); reg 2(1)). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
YAML cases for a qualifying young person aged 17 and 19, an 18-year-old non-dependant, a looked-after qualifying young person (no UC bedroom), a couple with a young person and two younger children (category E), a partner aged 19 (no extra bedroom) and a pensioner couple's grandchild under HB (SPC). Two LHA_claimant_composition cases asserted the old one-bedroom count for an apprentice non-dependant and an 18-year-old qualifying young person; both are now two bedrooms (Sch 4 para 10(1)(c) and (b)). Hypothesis properties: bedrooms never fall when a person aged 16-19 joins any family; the exact change when they do; and agreement with an independent count of the size criteria, children's rooms found by brute force. Fixes #2008 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o lha-bedroom-young-people
…t's benefit unit A member of a benefit unit aged 16 or over who is not the claimant, partner or a qualifying young person (UC) or child or young person (HB, CTR) is a non-dependant of the renter (UC Regs 2013 Sch 4 para 9; HB Regs 2006 and HB (SPC) Regs 2006 reg 3; SI 2012/2885 reg 9 and the Welsh and Scottish equivalents). The deductions now charge them: - UC: to the renter's own claim; non-dependants in other families stay with the household head's claim (para 9(2)(f)). Adds the para 15 renter exemption and limits the para 16 Pension Credit exemption to the claimant or partner who receives it. - HB: apportioned between joint occupiers by rent share (reg 74(5)); a boarder or lodger bears their own. - National CTR: pooled across the claiming families by joint-liability share; only claiming families bear deductions. Fixes #2014. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… cost contributions UC Regs 2013 Sch 4 para 15(1)(a) turns on the renter's own circumstances; found by a mutation that applied the exemption to every family member. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mutation testing (15 one-line mutations of the new logic) left the in-unit age floor surviving the YAML tests, and dropping in-unit non-dependants from HB or CTR eligibility surviving the properties. The YAML case now checks a child's classification, and the oracle checks HB and CTR eligibility independently. All 15 mutations are now killed by both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A non-dependant in a family's own benefit unit is that family's alone, not shared between joint occupiers: DWP guidance treats a joint tenant's sister as "Sarah's non-dependant" only (LHA Guidance Manual 2.093, example 2) and says "if a person is a non-dependant of only one of the joint occupiers, take the whole of the deduction from that joint occupier's entitlement" (HBGM A5 5.622). Reg 74(5) and CTR Sch 1 para 8(5) apportionment now apply only to non-dependants from other families. A lodger's family is one commercial arrangement for CTR too, so its adult son is no one's non-dependant there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ions say Review r2 (F3, F4, F5) found three departures from the text. F3. 155766b charged a joint occupier's own adult son wholly to that occupier, citing LHA Guidance Manual 2.093 example 2 and HBGM A5 5.622. HB reg 3(1) and (4) and CTR reg 9(1) make him a non-dependant of every joint occupier he shares accommodation with: none of reg 3(2)(a)-(f) excludes him in relation to the other occupier. Reg 74(5) and CTR Sch 1 para 8(5) then apportion him. The LHA example concerns the size criteria and a sister, whom the model already treats as another family's non-dependant and apportions; 5.622 is conditional. The old rule also made the result depend on whether the survey codes the son in his parent's benefit unit or his own. HB and national CTR now pool every non-dependant, in any family, and apportion by rent share (HB) or joint-liability share (CTR). F4. A lodger's adult son was no one's non-dependant for CTR. Reg 9(2)(e) excludes only the person liable to pay the applicant, as HB reg 3(2)(e)(i) does; the household extension in (iii) is for the landlord's side. He is now eligible and is the householder's non-dependant for CTR and HB, and still the lodger's own for HB, in full, since they are not joint occupiers. F5. Widening the shared CTR eligibility made a jointly liable sharer's local claim bear the head's own son (Newham: £489.84 in 2025). The local aggregation now counts only other families' non-dependants, as before, so this change is neutral for the five local schemes until each council's aggregation is brought into line. YAML: joint tenants share one tenant's son by rent share (and get the same result with him coded in his own unit); jointly liable applicants share one's son equally; a lodger's son is the householder's non-dependant (HB and CTR) and the lodger's (HB); Newham sharer does not bear the head's son. Property oracle and conservation invariants restated for pooling. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The local schemes' aggregation masks the shared individual deductions to members of other families not liable for rent, so it stays as on base while the national eligibility also covers in-unit non-dependants. That mask must be exactly the eligibility's other-family term. #2009 changes the term to the claimant family, so that a sharer with no rent is a claimant and not a non-dependant (reg 9(2)(d)). in_other_non_liable_family now holds the term once, and both the eligibility and local_non_dep_deductions call it, so composing with #2009 is one edit. No change in behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mutation check v3 found that dropping the applicant's own-family subtraction survived every test: with formula-computed eligibility the applicant's family never has an eligible member. An individual deduction set directly as an input does, and reg 9(2)(a) still keeps the applicant's own family out of its non-dependants, as base did. The YAML case pins it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r3: - R3-6: in_other_non_liable_family's docstring stated the proxy as if it were reg 9(2)(a), (d)-(e). It is a proxy: a family jointly liable for the council tax but paying no rent is wrongly included, which #2009's claimant-family test fixes. - R3-3: an in-unit non-dependant's own benefit awards are not modelled, so the HB reg 74(8) and CTR Sch 1 para 8(8) exemptions for a non-dependant on an income-related benefit or on UC with no earned income never apply to them. The documentation of is_benefit_unit_non_dependant_for_legacy_benefits now says so. No change in behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…milies; one HB bedroom for an occupier couple Review findings on #2010: - UC Sch 4 para 9(2)(g) applies to the whole extended benefit unit, so a qualifying young person no one is responsible for (reg 4(6)) in a non-dependant's family adds no bedroom for the household head. - HB reg 13D(3)(a): an ordinary occupier couple outside the claimant's family shares one bedroom (DWP circular HB A3/2017); only non-couple occupiers aged 16 or over take one each under (b). The property oracles encoded both errors as law; they now count the law, and two YAML cases pin the cross-family results. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Take #2006's housing_benefit_LHA_allowed_bedrooms.py whole: its rewrite over the claim's occupiers already gives the benefit unit's own members aged 16 or over a bedroom (reg 13D(3)(b)) and an occupier couple one bedroom (13D(3)(a)), so #2010's HB change is dropped and its HB YAML cases stay as tests. Keep #2010's UC change on top of #2006's LHA_allowed_bedrooms.py: the family term (para 10(1)(b), (c)) and the para 9(2)(g) exclusion on the non-dependant count, which now goes to uc_non_dependants_counted's claim. The exclusion stays in the UC formula, not in is_non_dependant_of_household_head, because that variable also feeds HB and CTR, where para 9(2)(g) does not apply. The property oracles follow #2006's claim rules: UC non-dependants count in the uc_non_dependants_counted claim, and every family liable for the rent counts the HB occupiers, with their children pooled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o lha-bedroom-young-people
Housing Benefit (SI 2006/213 reg 74; SI 2006/214 reg 55): - bands include their lower edge, and only a non-dependant in remunerative work (16+ hours, reg 6(1)) is banded, on the couple's joint income; anyone else pays the reg 74(1)(b) amount; - one deduction per couple, the higher (reg 74(3)); - no deduction for full-time students, State Pension Credit recipients, or under-25s on IS, income-based JSA or UC without earned income (reg 74(7), (8), (10)), nor for any non-dependant when the claimant or partner is blind or on AA, DLA care, PIP daily living or AFIP (reg 74(6)). Council Tax Reduction (SI 2012/2885 Sch 1 para 8; WSI 2013/3029 Sch 1 para 3 and Sch 6 para 5; SSI 2012/319 reg 48; SSI 2012/303 reg 67 and SSI 2021/249 reg 90): - each national scheme's own weekly scale for 2013-14 to 2026-27, instead of the Housing Benefit amounts; - the same banding and couple rules, with Wales's working-age exception for couples on UC; - the schemes' any-age exemptions, the UC limb from the year each scheme added it, and the existing applicant exemption. Fixes #2004; the non-dependant half of #1934. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, gross income - Identify the claimant or partner as the benefit unit's head or any member who is not an SSCBA s.142 child or qualifying young person (HB Regs 2006 regs 2(1) and 19; CTR regs 2(1)), replacing is_adult in the HB and CTR claimant exemptions. - Band a couple on the couple's joint income only, give the couple one deduction and any other adult in the family their own, and count benefit receipt (IS, JSA(IB), ESA(IR), SPC, UC) only for the award's claimant or partner. - Treat a non-dependant on IS, JSA(IB) or ESA(IR) as not in remunerative work for HB (reg 6(6)). - Take self-employed losses as nil in the UC no-earned-income test (UC reg 57(2)). - Add the family's UC (before the cap), tax credits and child benefit to gross income. - Tests: the review's counterexamples, a non-vacuous SPC exemption case, and property-test generators and oracles for dependent young people and losses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…A disregard - "No earned income" follows UC Regs 2013 regs 52-62: employment income plus SSP and SMP less relievable pension contributions (reg 55(4)-(5)), self-employed earnings with losses nil and the minimum income floor where the UC model applies it (regs 57(2), 62), and other paid work. - IS, JSA(IB), ESA(IR) and SPC count only for the person they are payable to (HB Regs 2006 reg 2(3)-(3A)): the member reporting the award, or the head; used for the exemptions and HB reg 6(6). UC still counts for both joint claimants. - Gross income uses UC after the benefit cap (UC reg 81), applying the cap to the capped benefits other than HB, which a non-dependant family does not receive. - CTR exempts an adult for whom another person is entitled to child benefit (LGFA 1992 Sch 1 para 3, via para 8(8)(b) and equivalents). - Tests: the review's counterexamples, and property oracles for the payee and the child benefit disregard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replaces the local claimant-or-partner helper (benefit unit head, or anyone not a child benefit child or qualifying young person) with the is_claimant_or_partner variable: the SSCBA s.137 couple, at most two people. A partner at school is now a partner, and a third adult in a benefit unit is deducted separately. Adds the round-2 review cases: a blind 16-year-old partner (Wales), a non-dependant couple with a partner at school, and a 17-year-old partner's PIP in Merton. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The changelog and the property generator's comment now name is_claimant_or_partner instead of the SSCBA s.142 definitions, and is_award_payee says that both members of a joint-claim jobseeker's allowance couple are on it (HB reg 2(3)(c)), which the model cannot identify. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ap childcare, child benefit claims - Gross income adds statutory sick, maternity and paternity pay (earnings, HB reg 35(1)(i)) and Maternity Allowance to each person's taxable income, and the family's IS, JSA(IB), ESA(IR) and Pension Credit to a couple's. - Earned income for the UC limb adds statutory paternity pay (UC reg 55(4)(c)), and relievable pension contributions come off self-employed earnings when there are no employed earnings (reg 57(2), step 4). - Scotland's working-age scheme exempts a non-dependant whose partner is on IS, JSA(IB) or ESA(IR) and who is not on Universal Credit, from April 2022 (SSI 2021/249 reg 90(8)(a), reg 4(1)). - The after-cap UC in gross income keeps the cap's childcare protection (UC reg 81(1)-(2)). - The LGFA 1992 Sch 1 para 3 disregard needs a child benefit claim. - The property oracle derives the claimant and applicant exemptions from the generated inputs, and the generator varies statutory pay, pension contributions, the start-up period, the award's reporter and child benefit claims. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Takes main's uv.lock, which drops an unintended one-line lock change from this branch's first commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22
left a comment
There was a problem hiding this comment.
Review status: PARTIAL — REQUEST_CHANGES
Reviewed head: e2376fed08ffa9dc19314531ed735eecd7bd4c3e
C4 — Fix the intended family roles or oracle in the ESA-passport property. The required Python 7/7 job fails test_council_tax_reduction_devolved_working_age_properties.py::test_income_related_esa_passports_to_the_full_liability at line 177. Its Scottish 32/52-year-old fixture omits explicit couple roles: the older adult becomes claimant and the younger a non-dependant. The passport flag is true, but a £288.60 deduction gives £211.40 CTR against the unconditional £500 oracle. The recorded case reproduces on the raw PR head; setting the intended claimant/partner roles explicitly makes the same property body pass. Please repair the generated household roles or account for actual non-dependants, then obtain passing required CI.
A3 is resolved: the description now dates the old 1bda5418d impact comparison. The new A4/C1/LHA/regulation 12 evidence strengthens the documented argument but leaves HB_APPORTIONMENT unverified for the householder/lodger/adult-son full-versus-apportioned deduction. The qualified interpretation remains a material evidence gap.
Prior C1/C2/C3/A1/A2 remain resolved. Validation reused the unchanged review and added one 8.224-second diagnostic campaign with an expected failing recorded case and passing role control; these are diagnostic calls, not a newly passed generated test suite. Hosted checkout was synthetic merge 7c2d70eb72; the local reproduction used the raw reviewed head.
The generator gave couples no roles, so of two adults at least 20 years apart the younger was presumed to be the elder's child and became a non-dependant, whose deduction the property's oracle left out. Families now carry is_claimant_or_partner, and the property checks that they have no non-dependant deductions. Two YAML cases cover a passported claimant's adult son: SSI 2021/249 regs 79(1) and 90(1)(b) in Scotland, WSI 2013/3029 Sch 6 paras 4(1) and 5(1)(b) in Wales. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
housing_benefit_non_dep_deductions now states that the model reads a boarder or lodger as outside reg 74(5)'s joint occupiers, the sources for that reading, that it is a qualified one, and what the other readings would charge. Its references add HB Regs 2006 reg 12, the 1987 reg 3 as made, and DWP's A4, C1 and LHA guidance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
C4
HB_APPORTIONMENT
A3The Impact section now reports run 42230879312 for I'll ask you to look again when CI passes at |
juaristi22
left a comment
There was a problem hiding this comment.
Review status: PARTIAL — COMMENT
Reviewed head: 3f16ec07f81db0afe6551554050a69343d80651a
C4 is resolved. The generator now assigns the intended claimant/partner and child roles, and the ESA-passport property checks that its generated families have no non-dependant deductions. The full affected batch passed 58 tests: 8 Python and 50 YAML, with no failures or skips. The recorded 32/52-year-old couple now receives the full £500 with no deduction; the new genuine adult-son cases receive £1,511.40 in Scotland and £1,451.60 in Wales from £1,800 liability. The deduction expectations were checked against the applicable official rules. Prior C1–C3/A1–A3 remain resolved.
HB_APPORTIONMENT remains unverified. The documentation correctly labels the lodger reading as qualified, but the additional 1987 regulation does not settle the full-versus-apportioned deduction under current HB reg 74(5). The FRS benefit-unit representation claim concerns survey incidence; it does not settle the reachable household-input case.
CI_EXECUTION remains unverified. The new Python 7/7 job stopped after a runner shutdown signal; its test step was cancelled and uploads skipped. The captured log showed no failed assertion before interruption. A complete successful current-head execution is still needed. C4's prior assertion failure is separately fixed and locally verified.
The computational model, parameter tree and lockfile are unchanged; the production-file delta is documentation/references. The Impact section now attributes the retained e237 report to run 42230879312. No new population calculation was performed. Approval remains withheld for the interpretation and CI evidence gaps.
C4 is resolved at 3f16ec0: explicit family roles and the full affected 58-test batch pass. Superseded by current-head review 5805802928. Approval remains withheld for HB_APPORTIONMENT and CI_EXECUTION evidence gaps.
HB_APPORTIONMENTNo source I've found settles reg 74(5) for a householder and a lodger, and a user can enter that household. If they put the lodger's son in the lodger's benefit unit and both adults claim, the model charges each claim the whole deduction for him. I've documented that reading in Would you approve with the reading documented in the code and tracked there? |
juaristi22
left a comment
There was a problem hiding this comment.
Review status: PARTIAL — two material evidence gaps remain
Reviewed head: 3f16ec07f81db0afe6551554050a69343d80651a.
Responding to the HB_APPORTIONMENT reply: documenting the competing readings and tracking them in #2894 preserves the uncertainty, but does not resolve it, so I cannot approve this scope yet.
- HB_APPORTIONMENT — UNVERIFIED. The reachable householder/lodger/adult-son household still produces a full deduction on each claim. The retained regulations and DWP guidance do not settle whether reg 74(5) requires apportionment between these claimants, or the commercial-household exclusion leaves only one charge. The new issue supplies no decisive official evidence. An authoritative interpretation covering that relationship, or a scope change that removes the unresolved behavior, is needed before this gap can close. This remains an evidence gap; I am not asserting a newly confirmed wrong statutory award.
- CI_EXECUTION — UNVERIFIED. The current Test result records 11,018 outcomes out of 12,908 collected across six completed shards, leaving 1,890 missing. The failed Python 7/7 leaf is the same previously reported runner shutdown. The rollup does not establish a new assertion failure or a recurrence of C4. A passing replacement for the incomplete required execution is still needed.
The new aggregate-impact run succeeded for main e0502003… versus merge 6ed7c73e…, which contains this head. Its headline rows agree with the retained report, supporting the updated impact comment. These are verified hosted outputs; no population estimate was recomputed locally.
C1, C2, C3, C4, A1, A2 and A3 remain RESOLVED. There are no new confirmed findings. The previous 58 passing repository tests and recorded family-role control remain valid for this unchanged head; no tests or models were rerun in this follow-up.
A lodger's non-paying adult son normally resides with the lodger and with the householder. We know of no regulation or decision that settles whether reg 74(5) splits his Housing Benefit deduction between their claims or the lodger alone bears it (HBGM C1 para 1.185), and #2894 tracks the question. housing_benefit_non_dep_deductions no longer charges the lodger as well: the householder bears the deduction in full and the lodger none, as on main. - The variable's documentation states that reading and the open question. - The YAML cases for a lodger's adult son expect the lodger's family to bear none. - The benefit-unit property's oracle and conservation check drop the lodger's second charge and assert that a lodger's family bears none, and the household head property again asserts that a family with no share of the rent bears no deduction. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks. I've made the scope change. At |
juaristi22
left a comment
There was a problem hiding this comment.
Review status: COMPLETE — APPROVE
Approved head: 96aa310679f7aab5fd9cc09b9472064f61174454.
HB_APPORTIONMENT — resolved by scope removal. The commercial lodger now pays no deduction for the non-dependant in its own benefit unit, while the householder bears the full deduction. Replacing only this formula with main’s gives the same final Housing Benefit in the checked lodger cases. The underlying statutory interpretation remains a baseline question tracked in #2894; this approval covers the narrowed PR scope.
67 current-head repository tests passed (61 YAML, six Python), along with four final Housing Benefit/household-income scenarios. Explicit 2026 working-age and pension-age controls give deductions of [£3,346.20, £0] and final HB of [£7,053.80, £5,200] for householder and lodger. Removing the addend raises the lodger’s HB and household net income by £3,346.20 relative to the previous PR head. Representation and ordinary non-lodger controls also pass. Invalid reviewer probe attempts were retained as diagnostics and excluded from this validation.
C1, C2, C3, C4, A1, A2 and A3 remain resolved. The new aggregate-impact run is bound to this head through merge 3776ee74… into main e0502003…; its headline outputs agree with the retained report. No population calculation was rerun locally.
All 21 latest observed checks pass at this head. The old 3f16… runner-shutdown gap is superseded by the passing new-head execution. There are no open findings or material evidence gaps in the reviewed scope; head, description, review activity, source dependencies, CI and duplicate reviews are checked again before publication.
Main e050200 brings Scotland's and Wales's working-age Council Tax Reduction route (#1966) and rent from boarders and lodgers (#2002). Two files conflicted: - housing_benefit_individual_non_dep_deduction_eligible: keep main's exclusion of a boarder or lodger and their partner (pays_rent_to_householder, reg 3(2)(e)(i)) beside this branch's exemptions (housing_benefit_non_dep_deduction_exempt), and cite reg 3, reg 74 and HB (SPC) reg 55. - programs.yaml: main's Council Tax Reduction notes, plus this branch's non-dependant deductions and exemptions for each scheme. Council Tax Reduction needs no change: both of this branch's deduction paths read council_tax_reduction_individual_non_dep_deduction_eligible, which keeps main's boarder and lodger exclusion. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2007's fe69a8c merges main e050200, which brings #2300, and resolves #2007's own conflicts with #2002. This branch resolved the same two files when it merged main at 2c16fe5, and its versions build on #2017: - housing_benefit_individual_non_dep_deduction_eligible: this branch's version, which reads is_non_dependant_of_household_head and is_benefit_unit_non_dependant_for_legacy_benefits, so neither flag counts a boarder or lodger who pays the householder. - programs.yaml: this branch's Council Tax Reduction notes. With #2007's head in this branch, #2007 and this PR can land in either order without another merge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
I merged #2007's head |
Main's case took the Housing Benefit scale for council tax reduction, as the model did before this PR. This PR gives Scotland its own scale (SSI 2021/249 reg 90(2)(b)), so the son's 300 a week falls in the band from 286 to 497 and the deduction is 10.95 x 52 = 569.40. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cc94e71 updates main's lodger's son case to Scotland's own CTR non-dependant scale, 10.95 x 52 = 569.40. This branch already expects 569.40 there (c536e7b), and its version of the file adds the claiming lodger case, so the merge keeps this branch's file and changes no tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
conftest.py deals the tests in shard_durations.toml out longest first, each to the least loaded shard, so the seven entries that e4f5062 added for test_non_dependant_deduction_properties.py move most of the shorter tests. Shard 7 of 7 picks up three more tests from tests/microsimulation/, and one worker runs them back to back with the shard's other microsimulation tests as the shard starts. That shard's runner already peaks near its 16 GB with main's table: 15,468 MB in run 42393088220. With this table, run 42314506461 peaked at 15,586 MB, and in runs 42402370483 and 42402482489 memory reached 15.4 GB within 80 seconds of the session's start and the runners shut down before the shard got through 14% of its tests. Main's table goes back in, so the listed tests take main's placement and the seven property tests take their shards from the hash. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
juaristi22
left a comment
There was a problem hiding this comment.
Resumed review at 4bb3813f4d41c59636a10d420da887f8f980b1e2 — PARTIAL, with no confirmed new findings. One local-validation gap remains; approval is withheld.
The only change since the saved 3c4feda57 assessment is the test timing table, now byte-identical to captured main. Production code, dependencies and the tested files are unchanged. The balancing dry run supports three fewer timed microsimulation nodes on shard 7; it does not establish the cause of the previous runner shutdown.
Nine additional regressions passed. The earlier 85 passes were retained after byte/dependency checks and were not rerun: 94 covered cases in total. Four actual 2026 household-context calculations now validate the before/past terminal-date effects through LHA, HB, UC, Pension Credit and household income. The diagnostic's initial input-name error and incomplete benefit-cap oracle were corrected and excluded; the final UC comparison includes the existing benefit-cap interaction.
The bounded campaign ended before these two nodes produced completed outcomes:
test_benefit_cap_lha_scheme_split_properties.py::test_maximum_rent_reads_the_housing_benefit_categorytest_benefit_cap_lha_scheme_split_properties.py::test_examples_reach_the_cases
Cached records contain no prior passing evidence for those exact cases, and their input domain includes 19-year-olds. They remain explicitly unverified. A successful current-head execution, locally or with attributable hosted test outcomes, can close the gap without repeating the completed checks.
Prior C1–C4 and A1–A3 remain resolved, with the HB-apportionment question still outside the removed scope. The old 3c4 runner shutdown is historical; current 4bb CI is pending. No new population estimate or standalone approval of #2016/#2017 is certified.
juaristi22
left a comment
There was a problem hiding this comment.
Completion follow-up at unchanged 4bb3813f4d41c59636a10d420da887f8f980b1e2 — COMPLETE, with no open findings or material evidence gaps. Approval remains withheld while exact-head CI is pending.
Both previously unfinished scheme-split regression nodes passed in one focused run (40.23 seconds). The completed review now covers 96 cases: two new passes plus 94 validated retained passes. The four actual final-result household contexts and their corrected benefit-cap/Pension Credit/Housing Benefit arithmetic were retained without reruns.
LOCAL_CAMPAIGN_COMPLETION is resolved. Prior C1–C4 and A1–A3 remain resolved; the removed Housing Benefit apportionment question and old child-head limitations remain outside this verdict. No production code, test-oracle or dependency change occurred between the saved checkpoint and this run. The historical 3c4 runner shutdown is not a failure of the reviewed 4bb head.
The completed code/source assessment is saved for a CI-only approval check once the current required checks pass, provided head, description, source evidence and substantive feedback remain applicable. No new population estimate is certified.
juaristi22
left a comment
There was a problem hiding this comment.
Review status: COMPLETE — no findings or material evidence gaps
Approved head: 4bb3813f4d41c59636a10d420da887f8f980b1e2.
The completed code and source review remains applicable. C1–C4 and A1–A3 remain resolved. Its 96 covered tests (54 YAML and 42 Python) and four previously validated native household contexts are retained; no model calculations or tests were repeated for this approval.
All current-head CI contexts have now passed, including Lint, Test / Result and Aggregate impact. The current aggregate report’s 51 flagged moves reproduce the previously assessed published metrics. Its dataset/year, suppression and pre-existing VAT-sign qualifications remain. Decile means use each side’s own households and do not establish individual gains or losses. Population estimates were not independently recomputed.
The baseline Housing Benefit apportionment question tracked in #2894 retains its recorded scope exclusion. Unintegrated child-branch combinations remain separate review work.
Fixes #2008
Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_young_person_bedroom.yaml::A qualifying young person has their own bedroom;
policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/housing_costs_element/non_dep_deduction/uc_non_dep_deductions_renter_exempt.yaml::UC Sch 4 para 15, a partner whom reg 3(3) excludes from the claim brings no exemption by being blind; policyengine_uk/tests/test_uc_renter_exemption_properties.py::test_the_single_claimants_afip_removes_the_deductionsaxiom: TheAxiomFoundation/rulespec-uk#527 queued; UC Sch 4 para 13 encoded-correct; TheAxiomFoundation/rulespec-uk#413 queued (UC Sch 4 paras 15-16); TheAxiomFoundation/rulespec-uk#406 queued (UC Sch 4 para 9, HB reg 3, CTR reg 9: who is a non-dependant, joint occupiers, lodgers, the household head); TheAxiomFoundation/rulespec-uk#407 queued (HB reg 74, SPC reg 55, CTR Sch 1 para 8)
Merge order
This PR contains #2007 and #2017 by merge.
0198ce4c9mergesmainat5c7744144into #2007's headfde435bd3, and6900b88b7supplies Housing Benefit withmain's supplied benefit cap totals.9f951ed43merges that into #2017's headb3e0d76b8; #2017 then limits the renter exemption to the claimants and counts reg 2's attendance allowance (866d0941f,65009ed34,33cd8db44) and moves two ofmain's CTR cases for its deduction (d2faa3bc9).7a99a5953merges #2017's headd2faa3bc9into this branch. Git reported no conflict in the last two merges.af54f8fecmoves the renter exemption cases to the 2 bedrooms this PR gives the son, and135b41ef8lets property 4's test readmain's new qualifying young person route (UC reg 5(1)(a)). #2007'sce2aef8c6then mergesmainatfed9bcabe,109fe2dd4merges that into #2017, and56de9a693merges that into this branch. #2007'sae4721f24then keeps two ESA band cases off the legacy closure claim,ae2be5fbemerges that into #2017, and1bda5418dmerges that into this branch. Git reported no conflict in those merges; #2007's description covers its own.c536e7bd0then mergesmainatd60944e9einto this branch and resolves its conflicts, and7ff98b0b0ande2376fed0adjust two properties. #2007'sfe69a8caathen mergesmainate0502003d, which brings #2300, and4b44c61a0merges that into this branch. Git stopped on the two files this branch resolved atc536e7bd0,housing_benefit_individual_non_dep_deduction_eligible.pyandprograms.yaml, and the merge keeps this branch's versions. #2007'scc94e715bthen movesmain's lodger's son case inboarders_and_lodgers_non_dependants.yamlto Scotland's CTR scale, which this branch already expected atc536e7bd0.3c4feda57merges it into this branch and keeps this branch's version of that file, so no file here changes. #2007's52fbb2400then putsmain'sshard_durations.tomlback, and4bb3813f4merges it into this branch. #2007's seven extra timings had moved three more tests fromtests/microsimulation/into Python shard 7 of 7, and that shard's runner shut down three minutes in, with 390 MB of memory free (run 42402482489).#2007 and #2017 land through this PR. This branch contains #2007's head
52fbb2400, so landing this PR lands #2007. #2017 charges an in-unit non-dependant's housing cost contribution, and this PR gives them their bedroom, so #2017 stays a draft and reachesmaininside this PR. This PR's diff againstmainshows #2007's and #2017's changes too. #2017's branch carriesb3e0d76b8, which updates amainCTR case for #2017's deduction (see Tests).What the code does now
LHA_allowed_bedrooms(Universal Credit size criteria) gives a bedroom to each member of the benefit unit aged 16 or over who is not the claimant or partner:is_child_or_qualifying_young_person_for_universal_credit), under UC Regs 2013 Sch 4 para 10(1)(b);is_benefit_unit_non_dependant_for_universal_creditfor this, the variable Charge non-dependant deductions within the claimant's benefit unit #2017 adds and the oneuc_individual_non_dep_deduction_eligiblereads, so the bedroom and the housing cost contribution follow one definition.uc_non_dep_deductions(from #2017) charges a housing cost contribution for each such non-dependant aged 21 or over who is not exempt (paras 13, 16), in their own family's claim if it makes one, and otherwise in the claim thatuc_non_dependants_countedselects (para 9(2)(f)). The bedroom follows the same routing: an in-unit non-dependant of a family that makes no Universal Credit claim of its own also has a bedroom in the claim that counts the household's non-dependants. Where that claim is the non-dependant's own family (a family the model counts as the claim althoughbenunit_is_rent_liablereads false, for example with no rent input), the family's own bedroom already covers them, and the formula adds none. So a joint tenant who claims, sharing with a pensioner head who does not, has 2 bedrooms and pays £1,158.60 a year for the head's son aged 30, as when the son has his own benefit unit; without that routing, the joint tenant would pay the contribution with 1 bedroom.An adult son in the claimant's benefit unit now has a bedroom and bears the contribution. A claimant aged 45, renting privately at £10,400 a year in Maidstone in 2026, with a son aged 22 who is not in education and has no income, has 2 bedrooms (category C, whose £208.85 weekly rate exceeds the rent), a contribution of £96.55 a month (£1,158.60 a year), a housing costs element of £9,241.40 and Universal Credit of £14,340.20. Household net income comes to £14,260.20: the award, plus the £100 Household Energy Payment, less the £180 TV Licence. Coding the son, not claiming, in a benefit unit of his own gives the same bedrooms, contribution, award and household income.
A qualifying young person no one is responsible for (
is_qualifying_young_person_for_universal_creditbut notis_child_or_qualifying_young_person_for_universal_credit, so one looked after by a local authority) gets no bedroom. The formula applies this para 9(2)(g) exclusion both to the family's own members and to the household's non-dependants from other families, which count in the claim thatuc_non_dependants_countedselects.The exclusion sits in the UC formula, not in
is_non_dependant_of_household_head, because that variable also feeds the Housing Benefit non-dependant rules (housing_benefit_has_non_dependant,housing_benefit_non_dep_deductions), where para 9(2)(g) does not apply.The formula reads the household head (
is_resolved_household_head), whose documentation describes the householder who owns or rents the accommodation in their name, as liable to make payments on a commercial basis for their occupation. A member who heads the household but does not claim then counts as neither a renter (paras 1(2) and 9(1)(a)) nor, under para 9(2)(d), a non-dependant, so the formula gives them no para 10(1)(c) bedroom, anduc_non_dep_deductionscharges no contribution for them. A woman aged 45 who claims has 1 bedroom at 2025 if her son, aged 20, not in education and in her benefit unit, heads the household. Liability takes no one out of para 9(1)(b), so a head who is a qualifying young person the renter is responsible for stays in the extended benefit unit and keeps the para 10(1)(b) bedroom. The same woman has 2 bedrooms at 2025 if instead her daughter, aged 17 and in upper secondary education, heads the household. Members of other families never count the head as a non-dependant, becauseis_non_dependant_of_household_headexcludes the head's family.On
mainthe formula counts only the renter or couple, non-dependants from other families, and children under 16. So a lone parent with a 17-year-old at college gets one bedroom (category B) instead of two (C). Onmainat 6c6e229, that household (rent £10,400 a year, Maidstone, 2026) hasLHA_allowed_bedrooms1 and auc_housing_costs_elementof £9,000; on this branch it has 2 bedrooms and £10,400.The renter exemption (from #2017)
uc_non_dep_deductions_renter_exempt(UC Sch 4 para 15) readsis_uc_single_or_joint_claimant, the single claimant or each joint claimant, less a partner whomuc_is_ineligible_partnerflags under reg 3(3). Para 1(2) makes the claimants the renters, so a partner who stays in the couple for capital and income but makes no claim brings no exemption. For para 15(2)(c) the formula readsuc_receives_attendance_allowance, reg 2's attendance allowance, which counts head (a), Attendance Allowance, and head (f), armed forces independence payment; the model holds no separate amount for heads (b), (d) and (e).At
135b41ef8, a claimant aged 45 in Maidstone in 2026 heads the household and pays £10,400 of rent. Reg 3(3) excludes the partner, aged 43, and a son aged 22 shares their benefit unit, with no income and not in education. The model gives the claim 2 bedrooms (category C, whose £208.85 weekly rate exceeds the rent) and a claimant mask of[true, false, false]. With nobody blind, or with only the partner blind, DWP deducts £96.55 × 12 = £1,158.60 for the son, and Universal Credit comes to £5,098.80 + (£10,400 − £1,158.60) = £14,340.20. With the claimant blind, or receiving £5,000 of armed forces independence payment and no Attendance Allowance, the claim pays no contribution and Universal Credit comes to £15,498.80. #2017's head alone gives the son no room, 1 bedroom at the model's £9,000.00, and £12,940.20 with the contribution.Housing Benefit needs no size-criteria change.
housing_benefit_LHA_allowed_bedroomsonmainalready gives each couple or single adult among the occupiers one bedroom (the formula cites reg 13D(3)(zb) and (a)), and each other occupier aged 16 or over one bedroom under reg 13D(3)(b). That includes a member who heads the household but does not claim: Housing Benefit counts occupiers, not non-dependants (reg 13D(3)), and leaves out of them only "any joint tenant who is not a member of the claimant's household" (reg 13D(12)). The model records joint tenancy only for a whole family (liable_for_share_of_household_rent) and leaves such a family out of the claimant's occupiers. This PR adds HB cases that pin those counts. The HB and CTR non-dependant deductions come from #2017 and #2007; this PR's own code reads neither, and neither readsLHA_allowed_bedrooms.The law
Universal Credit. Under UC Regs 2013 Sch 4 para 10(1), "A renter is entitled to one bedroom for each of the following categories of persons in their extended benefit unit":
Claimants to whom reg 26(2) applies count as "renters", and joint claimants as "joint renters" (para 1(2)). The extended benefit unit takes in the renter (or joint renters), any child or qualifying young person the renter is responsible for, and any non-dependant (para 9(1)). Anyone else who normally lives with the renter counts as a non-dependant, with exceptions (para 9(2)). Three matter here:
Under para 13(1), "a deduction is to be made in respect of each non-dependant who is a member of the renter's extended benefit unit". The Secretary of State exempts a renter to whom para 15(2) applies, and each non-dependant on para 16's list, which includes "(a) a person who is under 21 years old".
Parliament defines a child as a person under 16 (WRA 2012 s.40), and the Secretary of State defines a qualifying young person in reg 5.
For the renter exemption, para 1(2) says: "Claimants who fall within sub-paragraph (1) are referred to in this Schedule as “renters” (and references to “joint renters” are to joint claimants to whom regulation 26(2) applies)." Para 15(1): "No deduction is to be made under paragraph 13 in the case of— (a) any renter who is a single person to whom sub-paragraph (2) applies; or (b) any joint renter where at least one joint renter is a person to whom sub-paragraph (2) applies." Para 15(2) includes "(a) a person who is ... blind" and "(c) a person in receipt of attendance allowance". Reg 2 defines "attendance allowance" by six heads, including "(a) an attendance allowance under section 64 of the Contributions and Benefits Act" and "(f) armed forces independence payment under the Armed Forces and Reserve Forces (Compensation Scheme) Order 2011". Under reg 3(3), "A person who is a member of a couple may make a claim as a single person if the other member of the couple—" has not reached 18 and falls outside reg 8, lives outside Great Britain, serves as a prisoner, has no entitlement under reg 19, or falls within section 115 of the Immigration and Asylum Act 1999.
Housing Benefit. Under reg 13D(3) of the HB Regs 2006 and the HB (SPC) Regs 2006 (SI 2006/213, SI 2006/214), a claimant has "one bedroom for each of the following categories of occupier", including "(a) a couple" and "(b) a person who is not a child". "Occupiers" takes in the persons who occupy the dwelling as their home, "except for any joint tenant who is not a member of the claimant's household" (reg 13D(12)).
Invariants
The Hypothesis properties in
policyengine_uk/tests/test_lha_bedroom_young_people_properties.pyeach run 25 derandomized examples over populations of up to 4 households (up to 3 for properties 5 and 6), with sharers, boarders, lodgers and non-dependant families. On some draws the generator makes the person it adds to the head's family the household head in place of that family's first adult, who stays the claimant. Properties 5 and 6 also draw whether each family would claim Universal Credit.Monotonicity. Adding a person aged 16 to 19 to any family never lowers any family's UC or HB bedrooms, whether the test supplies the claimant and partner or the model infers them.
Exact effect. When the added person is not the claimant or partner, only these changes happen:
Two explicit
@examples add a qualifying young person a local authority looks after (aged 17, in upper secondary education, started at 16, before the terminal date), one to a single renter's family and one to a non-dependant's family, so the property always checks the para 9(2)(g) exclusion in both places.Reference agreement. Every family's bedrooms equal an independent count of the size criteria under both schemes, including the routing in 2. Children's rooms are the fewest that hold them two to a room (same sex, or both under 10), found by brute force, pooled across the HB occupiers.
In-unit non-dependants have a bedroom. Every benefit-unit member aged 16 or over who is not the claimant, partner, a UC qualifying young person or the household head (
is_resolved_household_head, whom the formula reads as liable, and so not a non-dependant under para 9(2)(d)) counts as a non-dependant with a bedroom. The test computes that set fromage,is_claimant_or_partner,is_qualifying_young_person_for_universal_creditandis_resolved_household_head, and asserts thatis_benefit_unit_non_dependant_for_universal_credit, which the formula reads, marks the same people. The bedroom goes to their family, and also to the claim counting the household's non-dependants where their family makes no claim and is not that claim. Making every such member a qualifying young person the renter is responsible for leaves every family'sLHA_allowed_bedroomsunchanged, except that the counting claim loses the bedroom of one whose family makes no claim: another family's qualifying young person is not that renter's non-dependant (para 9(2)(g)).Rooms and contributions. Nobody owes a housing cost contribution without being a non-dependant. When the test adds an adult aged 16 to 64, not in education, with or without Attendance Allowance, to any family as an in-unit non-dependant, they owe a contribution unless aged under 21 or receiving Attendance Allowance (para 16(2)). The claim that bears it (their own family's if it makes a claim, otherwise the counting claim) gains that contribution unless its renter is exempt under para 15, and gains one bedroom; no other family's contributions change.
Coding. Moving such an adult, not claiming, between a family and a benefit unit of their own leaves every claiming family's UC bedrooms, contributions and award unchanged.
test_uc_renter_exemption_properties.py(from #2017) checks two more, with 10 derandomized examples each over 8 households of a renting claimant aged 18 to 64, a partner whomuc_is_ineligible_partnerflags, an adult son in their benefit unit and an adult in a non-claiming family of their own:The formula computes a fixed expression of its inputs, with no randomness, so it gives the same result for the same inputs.
Tests
LHA_young_person_bedroom.yaml, 14 cases:universal_credit(£14,340.20) andhousehold_net_income(£14,260.20), with the arithmetic in the comments;The £ expectations use a rent of £200 a week, between the model's Maidstone one-bedroom (B, £173.08 a week) and two-bedroom (C, £208.85 a week) rates, the same in 2025 and 2026.
uc_non_dep_deductions_renter_exempt.yaml(from Charge non-dependant deductions within the claimant's benefit unit #2017), six cases throughuniversal_creditandhousehold_net_incomein the household above, each with 2 bedrooms, category C, at135b41ef8:Household net income adds the £100 Household Energy Payment and takes off the £180 TV Licence, which the model halves where a household member is blind.
household_benefitslistsafcsbut notarmed_forces_independence_payment, so household net income leaves out the £5,000 payment, as onmain.test_lha_bedroom_young_people_properties.py, property 5's test:mainadded UC reg 5(1)(a), under which a 16-year-old outside education counts as a qualifying young person before the 1 September after their 16th birthday. Without135b41ef8the test, which assumed the added member never qualifies, fails on a 16-year-old added to a household headed by a 20-year-old; that commit readsis_qualifying_young_person_for_universal_creditfor the added member, and the file reports 6 passed.LHA_claimant_composition.yaml: two cases, a 17-year-old apprentice non-dependant and an 18-year-old qualifying young person, now assert UC category C (para 10(1)(c) and (b)) besidemain's HB category C.Against d8c2249 (with fa6ddae's YAML, less the one output that names Charge non-dependant deductions within the claimant's benefit unit #2017's variable): the adult son's case fails (
uc_non_dep_deductions0, expected £1,158.60), and so does the joint tenant's (uc_non_dep_deductions0 for the joint tenant, expected £1,158.60); the other 12 cases pass.Against
main(6c6e229, with d8c2249's test files copied in; the YAML gives the same result at 0080274): 8 of the 28 cases in the two YAML files then failed, all on the UC bedroom count or category. Three of the first four properties failed (exact effect, reference agreement, in-unit non-dependants).Mutations at e700316 (the same model code as d8c2249) of
LHA_allowed_bedrooms, each run against the two YAML files (28 cases) and the first four properties:family_rooms = benunit.sum(qualifying_young_person)) failed two YAML cases (A member aged 18 who is not a qualifying young person is a non-dependant with a bedroomandA 17-year-old apprentice in the renter's benefit unit is a non-dependant) and properties 2, 3 and 4.& ~no_one_responsible) failed one YAML case (A qualifying young person no one is responsible for in a non-dependant's family adds no Universal Credit bedroom) and property 2.family_non_dependant = family_member) failed three YAML cases and properties 2 and 3.family_non_dependant = family_member & ~qualifying) failed one YAML case (A member who heads the household but does not claim adds no Universal Credit bedroom) and properties 2 and 3.Mutations at 50e2e44, each run against
LHA_young_person_bedroom.yaml,LHA_claimant_composition.yamlandbenefit_unit_non_dependants.yaml(76 cases; 2d362d2 changes only the property file). The first four ran against the six properties at fa6ddae, whose model differs only by the guard the sixth mutation drops; the last two ran against the six properties at 2d362d2.is_benefit_unit_non_dependant_for_universal_credit, which the bedroom now reads (& ~household_head): killed. It fails two YAML cases (A member who heads the household but does not claim adds no Universal Credit bedroomandUC and HB, a head who applies for CTR alone is not her benefit unit's non-dependant) and properties 2, 3 and 4.is_benefit_unit_non_dependant_for_universal_creditfrom the UC gate (uc_individual_non_dep_deduction_eligiblereads onlyis_non_dependant_of_household_head): killed. It fails 10 YAML cases, among themAn adult son in the renter's benefit unit has a bedroom and bears a housing cost contributionandA claiming joint tenant has the bedroom of the non-claiming head's adult son whose contribution it bears, and property 5.is_benefit_unit_non_dependant_for_legacy_benefitsfrom the HB gate (housing_benefit_individual_non_dep_deduction_eligible): killed. It fails 8 HB cases inbenefit_unit_non_dependants.yamlandtest_benefit_unit_non_dependant_properties.py::test_deductions_match_the_oracle. The six properties here pass, as they check UC only.council_tax_reduction_individual_non_dep_deduction_eligiblereturnsage >= 18 & other_family): killed. It fails 3 CTR cases inbenefit_unit_non_dependants.yamlandtest_deductions_match_the_oracle. The six properties here pass.person.household.sum(non_dependant)without| passed_on): killed. It fails one YAML case (A claiming joint tenant has the bedroom of the non-claiming head's adult son whose contribution it bears) and properties 2, 3 and 5.~benunit.project(own_claim)without| counted): killed. It fails one YAML case (A 17-year-old apprentice in the renter's benefit unit is a non-dependant, UC category D instead of C) and none of the six properties, whose generator always sets a rent, so no family is the counting claim without being liable for the rent.council_tax_reduction_prescribed_benefits.yaml:main's caseWhere a household head applies alone, her own IIDB counts with her State Pension, and the father's does notpredates Charge non-dependant deductions within the claimant's benefit unit #2017 and expected no deduction for the couple in her benefit unit. Under Charge non-dependant deductions within the claimant's benefit unit #2017 they are her non-dependants, one deduction of £5.20 a week (£270.40 a year), so the case now expectscouncil_tax_reduction_non_dep_deductions£270.40 andcouncil_tax_benefit£1,195.968 (1,466.368 − 270.40). It fails at 9c6a994 without that change and passes with it.test_council_tax_reduction_devolved_working_age_properties.pyandcouncil_tax_reduction_devolved_working_age.yaml: the generator now gives every family explicit roles (is_claimant_or_partner). Without them, of two adults 20 or more years apart, the model presumed the younger to be the elder's child. This PR makes such an adult in the claimant's benefit unit a non-dependant, and the ESA passport property's whole-liability oracle left out their deduction. The maximum reduction equals the liability less any non-dependant deductions (SSI 2021/249 reg 79(1); WSI 2013/3029 Sch 6 para 4(1)), so the property also checks that its families have none. Two YAML cases give a passported claimant aged 50 a son aged 25 in the same benefit unit: a Scottish council deducts £5.55 a week (reg 90(1)(b)), leaving £1,511.40 of £1,800, and a Welsh council £6.70 (Sch 6 para 5(1)(b)), leaving £1,451.60.test_benefit_cap_lha_scheme_split_properties.py:mainadded an example of a lone parent with a 19-year-old in full-time education who is past UC's terminal date, and asserted that the UC and HB bedroom counts differ. Under para 10(1)(c) that young person counts as a non-dependant with a UC bedroom, so the test now asserts 2 bedrooms under each scheme. Invariant 3's docstring now says where the two counts still differ: a qualifying young person a local authority looks after, and other occupiers' children.Mutations at
135b41ef8, each run againstuc_non_dep_deductions_renter_exempt.yamlandtest_uc_renter_exemption_properties.py: puttingis_claimant_or_partnerback as the renter fails the excluded partner's blindness and armed forces independence payment cases and invariant 7; puttingattendance_allowance > 0back fails the single claimant's armed forces independence payment case and invariant 8. Both mutants die, as at Charge non-dependant deductions within the claimant's benefit unit #2017's headd2faa3bc9.At
135b41ef842e87947da3e8ec0fdb13e2648cbd23, locally with no survey data, each run under-n 4:policyengine-core testonfinance/benefit/family1,878 passed,gov/dwp968 passed andgov/local_authorities/council_tax_reduction391 passed, none failing;test_lha_bedroom_young_people_properties.py6 passed;test_benefit_unit_non_dependant_properties.py3,test_council_tax_reduction_claimant_properties.py3,test_household_head_agreement_properties.py3,test_non_dependant_deduction_properties.py10,test_uc_afip_housing_contribution_properties.py3 andtest_uc_renter_exemption_properties.py2 passed; the other files that readuc_non_dep_deductions,uc_receives_attendance_allowanceoruc_is_ineligible_partner:test_benefit_cap_lha_scheme_split_properties.py7,test_rent_of_sharers_boarders_and_lodgers_properties.py6,test_uc_legacy_closure_properties.py4,test_uc_non_dep_pension_credit.py3,test_uc_receiving_education_properties.py5,test_uc_single_claim_properties.py8 andtest_uc_work_related_groups_properties.py14 passed;policyengine_uk/tests/code_health3,172 passed. The other property files ran on a build of this head whose tree differs only in the three test files6900b88b7,d2faa3bc9and135b41ef8change;uvx ruff@0.17.2 format --check .,ruff check .andruff check --select F811,F821 policyengine_ukreport nothing;git diff --checkover this branch's new commits reports nothing;git merge-tree --write-tree --name-only HEAD origin/mainagainstmainat5c7744144reports no conflict;.github/check_fix_pr.pypasses on this title and body.At 2d362d2 (the YAML and the model code match 50e2e44, where the YAML ran):
policyengine-core testonfinance/benefit/family(1,840 passed),gov/dwp(806 passed) andgov/local_authorities/council_tax_reduction(376 passed), none failing;test_lha_bedroom_young_people_properties.py6 passed;test_benefit_unit_non_dependant_properties.py3 passed,test_council_tax_reduction_claimant_properties.py3 passed andtest_household_head_agreement_properties.py3 passed (at 50e2e44, the same model);policyengine_uk/tests/code_health3,110 passed;ruff format --check,ruff check,ruff check --select F811,F821 policyengine_ukandgit diff --check d8c224979..HEADclean;.github/check_fix_pr.pypasses on this title and body.A lodger's adult son
The model charges a boarder or lodger no Housing Benefit non-dependant deduction, as
maindoes, even for a non-paying adult son in the lodger's own benefit unit. The householder bears his deduction in full, as when the survey puts him in a benefit unit of his own. He normally resides with the lodger too, and I found no decision on whether HB reg 74(5) would split his deduction between the two claims, or whether the lodger alone would bear it under C1 para 1.185's wider exclusion. This comment sets out the sources on each side, and #2894 tracks the question.Impact
CI's Aggregate impact report for
e2376fed0(run 42230879312) compared maind60944e9ewith7c2d70eb7, its merge of that revision into that main, onenhanced_frs_2024_25.h5(policyengine-uk-data 1.58.1), a full microsimulation for each side and year. The report counts #2007 and #2017, which this PR contains. It finds no check broken and flags 51 moves, among them Universal Credit spending in every year and child poverty.d16a2e89cand3f16ec07fchange only tests and documentation, and96aa31067stops charging a lodger for a non-dependant in its own benefit unit.We estimate that Universal Credit spending rises by £224.2m in 2025-26, £246.9m in 2026-27, £261.3m in 2027-28, £274.6m in 2028-29, £287.0m in 2029-30, £300.7m in 2030-31 and £313.0m in 2031-32. Housing Benefit spending rises by £11.2m to £16.1m a year, and Council Tax Reduction by £9.8m to £13.1m. Household net income on the HBAI definition rises by £250.3m, £268.6m, £283.9m, £298.2m, £311.4m, £326.2m and £338.5m in those years. Each year 0.8% of people gain over £1, and 0.0% lose over £1. Absolute child poverty before housing costs falls by 0.05 points (7,100 children) in 2025-26, 0.24 points (35,500) in 2026-27, and 0.22 to 0.23 points (33,000 to 33,900) in each later year.
#2007's own report at
ae4721f24moves Housing Benefit and Council Tax Reduction and leaves Universal Credit alone, so the Universal Credit rise comes from #2017 and this PR. For #2017 at 89beee8 (base #2007 at 0b6c3db), we estimate that Universal Credit paid rises by £59.9m in 2026, all from the para 15 renter exemption.Known gaps (other PRs)
gov.dwp.universal_credit.elements.child.eligibility.child_age_limit) above 16 makesis_benefit_unit_non_dependant_for_universal_credittreat a 16- or 17-year-old as a child, whilebedrooms_for_childrencounts only those under 16, so such a member gets no UC bedroom under that reform. Under the enacted parameter (16) the two agree.🤖 Generated with Claude Code