Skip to content

Run CI on 28 pull requests merged together (not for merging) - #2887

Closed
MaxGhenis wants to merge 600 commits into
mainfrom
hub-integration-1106-c
Closed

MaxGhenis wants to merge 600 commits into
mainfrom
hub-integration-1106-c

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

This draft now sits on main at d60944e9e, which holds #1966 and #2002, so CI can test 28 open pull requests as one tree. Please don't merge it: I'll close it and delete the branch when the run finishes, and post the result here first.

I merged these in order, and the ones after "with" arrive inside the pull request they follow:

No single pull request's CI tests these combinations, and the merges here fix them:

#1966 and #2834 leave two readings of the tax on pay in place. #2834 deducts the tax the pay adds, and #1966 takes the UC split, with earnings as the lowest slice, so the Child Benefit charge no longer reaches a Scottish working-age award. I kept both here, and the difference needs its own decision.

Each fix moves into the real merge of whichever pull request in its pair lands second. #2828's head already carries its fixes for #1966's route, main's Step 6 order test and the 2019 row of the pensioner tariff table, and #2010's head carries every #2010 fix here except the one that needs #2827.

The run at 76392628b lost eight Python jobs about four minutes in, at 15.4 to 15.7 GB, and Test 6/7 at minute 51. The shards that finished failed only on the clashes above, and Release 2/7 passed. #2893 keeps the certified file on one shard, and this head carries it, so this run shows whether that stops the early losses.

Reproducer: policyengine_uk/tests/test_price_base_year.py::test_reform_changes_the_base_year

🤖 Generated with Claude Code

MaxGhenis and others added 30 commits November 2, 2026 15:15
The Pension Credit route test computed CTR income with the whole tax
liability, and the trading-loss test held income tax, which the CTR
branches then read unchanged. Both now use council_tax_reduction_tax_deduction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KeMAheSRPPEYghYkj
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6G23mTmYu4Zu1DbAPa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6G23mTmYu4Zu1DbAPa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6Kxyq1frfihPSQorLM
… branch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6GwwVa9CRxP94r4i4J
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6GwwVa9CRxP94r4i4J
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cases 4, 5, 6, 12, 13 and 14 of esa_income_pension_age.yaml assert a
full-year income-related ESA award in 2026-27. Each ESA reporter now has
the art. 3A(2) appointee saving, so the 1 July 2026 abolition leaves the
award payable for the whole year and each case still tests the
pension-age bar and the Pension Credit condition.

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

#2340 reads a basic State Pension recipient aged 80 or over as reporting
the 25p age addition. The basic reporter is 85, so it now reports the
full basic rate plus the addition, and the test checks that the model
pays the addition at the data year's 25p in every year.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6GwwVa9CRxP94r4i4J
The 2026 examples of test_esa_income_pension_age_properties.py draw saved
awards, and the three 2026 example tests give each reporter the art. 3A(2)
appointee saving, so each award stays payable for the whole year and the
tests still check the pension-age bar and the Pension Credit condition.
legacy_award_work_reference.esa_abolition_claim reads the saving.

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

The household's stocks-and-shares ISA reaches Universal Credit capital
through share_like_capital, which UC values less its sale-expense rate
(UC Regulations 2013 reg. 49(1)(a)). Build the expected capital from
savings, the cash ISA and the ISA less that rate, read from the
parameters, and keep the check that capital keeps one ratio to savings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6Kxyq1frfihPSQorLM
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6G23mTmYu4Zu1DbAPa
FA 2004 s. 192(4A) raises the Scottish basic rate limit and the Scottish
rate limits above it, where a Scottish rate above the Scottish basic rate
is chargeable. The docstring and one comment said "the Scottish rate
limits". Text only; the AST with docstrings blanked matches 3b54d53.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The excess comes in whole pence only for a limit in whole pence. numpy
reports both nextafter from zero and spacing of the subnormal it returns
as underflow, so both stay inside the errstate blocks. Text only; the AST
with docstrings blanked matches df78930 in both files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On macOS arm64 numpy reports np.spacing(np.float32(0)) as underflow, at the
locked 2.4.6 and at 2.1.3, 2.4.2 and 2.5.4; CI's Linux arm64 runners pass the
same check at 2.4.6. Under the strict state in test_stored_pence.py, stored_pence
of a zero amount then raises on a Mac, so both zero tests fail there. The Class 1
tolerance in carers_allowance_earnings takes the same step for a person with no
NI income. Both now work it out under np.errstate(under="ignore"), which changes
no value and restores numpy's error state when the block ends.

At macOS arm64 and numpy 2.4.6, test_stored_pence.py gives 2 failed on the two
zero tests before this commit and 11 passed after it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cut the changelog fragment to one sentence, as the repository's rule asks,
rewrap the one docstring line over 88 characters, and state what the
generator comment holds for inferred roles too. Text only; the test file's
AST with docstrings blanked matches e700316.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
state_pension_reported's documentation says the three components divide the
report by 52, but on this tree they read it less any age addition. Say so.
Rewrite the test docstring's sentence on the ages at which the model gives a
woman the basic type. Text only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
WRA 2007 Sch 1 para 6(1)(c) and (d) make the two awards exclusive. Where
the couple's Pension Credit without the award is nil, the model pays the
award and no Pension Credit, whatever the award would add through the SPC
Regs 2002 Sch VI para 4(1)(a)(vii) disregard. Case 18 now expects that,
case 25 states the para 4(2) limit, and the combined property requires no
family to have both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KPXgYTCw1EWx4JK8T
Keeps #2007's reg 74(3) and 74(5) sentences and #2017's in-unit wording.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KBpj2nEGrPeiuxZmW
Takes #2010's side for its own five files: the merge's second base
reverts them to main, which #2010's versions already contain.

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

T(E, S, U) now zeroes income_tax_charges beside the uncounted income: the
High Income Child Benefit Charge recovers Child Benefit, which the pensioner
schemes do not count, and the pension annual allowance charge falls on
contributions. Add YAML cases for the charge, a working-age partner's Class 1
in a pensioner scheme, reg 37(1)'s personal relief with Marriage Allowance,
and the Scottish Marriage Allowance cliff; a property test that a Child
Benefit claim leaves the pensioner deduction unchanged; and assert invariant
5 on a simulation with the tax cliffs held, in place of the exemption.

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

LHA_allowed_bedrooms reads is_benefit_unit_non_dependant_for_universal_credit,
the definition uc_non_dep_deductions uses, and counts an in-unit
non-dependant of a family that makes no claim in the claim that counts the
household's non-dependants, as uc_non_dep_deductions does. Adds the adult
son's case through final UC and household income, its own-unit control, a
non-claiming head's son in a sharer's claim, and properties tying rooms to
contributions and to the coding of the benefit unit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KBpj2nEGrPeiuxZmW
Keep #2279's own-right documentation for Pension Credit's young person
and this branch's 1 September end; drop the sentence that said the model
did not apply that end.

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

Add YAML cases 13 and 14: a 19-year-old at school before the 1 September
following their 19th birthday who reports their own Universal Credit or
income-related ESA is a qualifying young person for neither programme.
State Income Support as the exception to Universal Credit and Pension
Credit agreeing, assert the agreement grid holds nobody on it, and test
that own Income Support in 2025-26 ends the Pension Credit status only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6Jra6ok6eCQvZUMMLg
MaxGhenis and others added 24 commits November 6, 2026 08:18
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s test

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the hub-integration-1106-c branch from 7639262 to 4532c8d Compare November 6, 2026 14:07
@MaxGhenis MaxGhenis changed the title Run CI on 27 pull requests merged together (not for merging) Run CI on 28 pull requests merged together (not for merging) Nov 6, 2026
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Both runs finished at 15:38Z. Every test that finished passed except one, and seven of the fourteen Python shards stopped before their tests finished.

Shard Code changes Versioning updates
YAML passed passed
Python 1 1,973 passed, then the job hit the 90-minute limit 1,883 passed
Python 2 cancelled at the 90-minute limit cancelled at the 90-minute limit
Python 3 2,042 passed 1,958 passed
Python 4 1,964 passed, then the job hit the 90-minute limit 1,866 passed
Python 5 runner lost after 45 minutes runner lost after 46 minutes
Python 6 runner lost after 8 minutes runner lost after 69 minutes
Python 7 1 failed, 2,042 passed 1 failed, then cancelled at the 90-minute limit

Shard 7 failed test_income_related_esa_passports_to_the_full_liability in both runs. Hypothesis drew a Scottish couple aged 32 and 52 on income-related ESA, and the award came to £211.40 of a £500 liability. On #2010 the model presumes the younger of two adults at least 20 years apart to be the elder's child, who can then be a non-dependant. This branch holds #2010 from before d16a2e89c, which gives the property's families explicit roles. #2010 and #2828 merge cleanly on that test file, and the merge keeps #2010's roles and #2828's new invariant.

I'm closing this draft and deleting its branch.

@MaxGhenis MaxGhenis closed this Nov 6, 2026
@MaxGhenis
MaxGhenis deleted the hub-integration-1106-c branch November 6, 2026 19:59
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.

2 participants