Repository navigation
Lock policyengine-uk 2.177.4 and policyengine-core 3.34.10 and follow what their releases change - #1572
Open
juaristi22 wants to merge 5 commits into
Open
Lock policyengine-uk 2.177.4 and policyengine-core 3.34.10 and follow what their releases change#1572juaristi22 wants to merge 5 commits into
juaristi22 wants to merge 5 commits into
Conversation
The UK lock moves from policyengine-uk 2.174.1 to 2.177.4, the newest release (microcosm#1095). From 2.177.4 policyengine-uk requires policyengine-core 3.34.9 or later, so the UK side's core moves from 3.33.3 to 3.34.10, the newest; the US side stays on 3.32.5. uv.lock moves those two packages alone. Three new inputs stay at their defaults and are signed in UK_ENGINE_DEFAULT_INPUTS, each with the error it can make, for María's signature: legacy_prescribed_accommodation_capital_exception (2.174.8) and esa_income_appointee_saving (2.175.3) at False, and cares_for_severely_disabled_person (2.177.3) at True, which moves no figure. From 2.176.1 is_before_universal_credit_qualifying_young_person_terminal_date has a formula from the date of birth, so it leaves the engine's input surface (376 to 378 inputs); frs_education still writes it, the loader takes it as an override, and Universal Credit reads it only for a 19-year-old alongside the education condition, so the result is the engine's own. No economic pin moves: the vendored uprating pins and the bonus-sacrifice anchor change only their version stamps. The three pyproject floors, the approved lock digest, the engine-core pin test, the concept mapping's version and the concept coverage follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The stage notes, code comments, docstrings and docs that describe the locked engine now cite 2.177.4, each checked against it: the education flag's one reader (uc_receiving_education), is_uc_eligible's age and role conditions, Universal Credit's capital readers, the limited capability proxy, the PIP categories from points, the trading allowance claim status, the ISA and Lifetime ISA readers and the capital source lists are unchanged from 2.174.1 (is_uc_eligible changes only its reg 60A Working Tax Credit test, from 2.175.1). The two policy_parameters dependencies of the CGT stages follow the new floor. The take-up stage's note still said the build flags nobody in full-time education and named three engine cases; since #1535 frs_education sets the flag and the lockstep test names a fourth, which the note now gives, as the code comment does. The coverage manifest tool's reviewed PIP notes and the eFRS known gaps follow, and the manifest is regenerated: only those notes and the source manifest digest move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d a test From 2.176.1 is_before_universal_credit_qualifying_young_person_terminal_date defaults to true, so the eFRS candidate's frozen non-default shares for that column, which the reader measures against the engine's default, become the shares of the false values, as tools/build_uk_release_input_coverage_manifest.py measures the cached certified candidate. Every other measurement matches the frozen receipt, which keeps its original engine provenance (2.89.0). The stored values do not change, and the column stays a populated loader input. From 2.177.2 (PolicyEngine/policyengine-uk#2828) tax_band applies the Scottish limits to income other than savings and dividends only, as HMRC classifies taxpayers. That closes the known gap the tax-band measure test pinned so a fix would show: the test's Scottish taxpayer with 40,000 of earnings and 5,000 of dividends is now INTERMEDIATE, not HIGHER, and Scotland's two national ITL rows move with the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The charter-H2 fixture is regenerated on policyengine-uk 2.177.4 and policyengine-core 3.34.10, and a --check run reproduces it byte for byte. Every node's numerical dependencies name the new engine and core, four stage contract digests follow the re-stamped notes and dependency strings, and the fixture's synthetic CGT asset-type facts, which are sized from the fixture frame after the stages that read the engine, move by under 0.001%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
main moved microcosm-emitter-interface to 0.14.0 (and its floor in microcosm-build); this branch moved policyengine-uk and the UK side's policyengine-core. uv.lock merges both, uv lock confirms it unchanged, and APPROVED_UV_LOCK_SHA256 is that lock's digest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The UK lock moves from policyengine-uk 2.174.1 to 2.177.4, the newest release on PyPI (microcosm#1095). From 2.177.4 policyengine-uk requires policyengine-core 3.34.9 or later, so the UK side's core moves from 3.33.3 to 3.34.10, the newest; the US side stays on 3.32.5, and
uv.lockmoves those two packages alone. What each release since the lock needs is in #1095's "The next policyengine-uk lock" (the read of 10 November).This PR stacks on #1550 (
uk-event-data-pr2, atb4250ebe9), as María asked, so its CI runs once it targets main. Until #1550 merges, the pin moves to each later policyengine-uk release: PolicyEngine/policyengine-uk#2807 and PolicyEngine/policyengine-uk#2808 have merged since 2.177.4, and more are in pe-uk's merge queue.The three new inputs, signed at their defaults
Each is in
UK_ENGINE_DEFAULT_INPUTSwith the error it can make, for María's signature:legacy_prescribed_accommodation_capital_exception(2.174.8), at False: the FRS samples private households, so it holds almost no claimant living permanently in prescribed accommodation. Such a claimant's Income Support, income-based JSA or income-related ESA is understated by the tariff income on capital between £6,000 and £10,000.esa_income_appointee_saving(2.175.3), at False: the FRS does not identify appointees, so every reported income-related ESA award ends at the abolition of 1 July 2026. DWP exempted around 500 such claimants. 2025, the calibration year, does not move.cares_for_severely_disabled_person(2.177.3), at True: the FRS records caring hours but not whom the carer cares for. At True, caring hours pay as before, so no figure moves.An input that gained a formula
From 2.176.1,
is_before_universal_credit_qualifying_young_person_terminal_datefollows the date of birth, so it leaves the engine's input surface (376 to 378 inputs).frs_educationstill writes it, and the loader takes a stored value over the formula, as it does for any engine variable. Universal Credit reads it only for a 19-year-old, together with the education condition, which is the same testfrs_educationsets it from. So the stored value and the formula give the same result.What the build's engine reads return now
2.174.2 to 2.175.3: as UK: every open data item: uk-data parity, engine locks, the local surface, consumption and high-value homes #1095 lists them. The qualifying young person rule for 16-year-olds; the State Pension age addition; the benefit cap reduction; the Universal Credit deduction flag; reg 60A's Working Tax Credit test; Maternity Allowance in the cap; and the income-related ESA abolition, which moves nothing before July 2026.
2.175.5, 2.175.8 and 2.177.2 (Council Tax Reduction):
The council tax rows read council tax net of the reduction.
2.176.0 (Model rent from boarders, lodgers and sub-tenants for the householder policyengine-uk#2002): rent from boarders, lodgers and sub-tenants for the householder.
rent_paid_as_boarderandrent_paid_as_lodgerthe build writes.property_income.2.176.1: the qualifying young person's terminal date, above. It now applies to Pension Credit too.
2.176.2:
benefit_cap_welfare_benefitswould now also need Housing Benefit before the cap; the build supplies neither.2.177.0: VAT's survey coverage moves from 0.67 to 0.69.
obr.vatstays held.2.177.2: Marriage Allowance becomes the recipient's tax reduction, and Scottish taxpayers' tax bands apply the Scottish limits to income other than savings and dividends.
2.177.3: Plan 5 borrowers repay nothing before 6 April 2026, the date the student-loans stage already uses.
slc.borrowers.plan_5_above_thresholdthen matches SLC's nil, andslc.repayments.england_plan_5, held, reads nil.policyengine-core 3.34.10: fixes to cached periods and to inputs on reform branches. The UK side neutralises no variable and uses none of the APIs 3.34.0 removed.
The other releases change nothing the build reads at 2024 or 2025, or nothing at all.
What does not move
test_uk_cgt_projection.py).UK_HBAI_GROSS_INCOME_DEDUCTIONSkeeps its parity. 2.176.0 addssublet_incometo HBAI income, not to its subtractions, and the build keeps that income inproperty_income.Texts and derived files
Every text that described the locked engine was checked against the diff from 2.174.1 to 2.177.4 and now cites 2.177.4. That covers the stage notes, code comments, test docstrings, the ISA and LISA docs, and #1550's PIP points, limited capability and trading allowance texts.
The take-up stage's note had said the build flags nobody in full-time education. Since #1535 it does, and the note now says so, as the code comment does. The coverage manifest tool's PIP notes and the eFRS known gaps follow.
The concept coverage report, the release input coverage manifest, the H2 fixture, the cited versions and
APPROVED_UV_LOCK_SHA256are regenerated.Measurement
Deferred until #1550 merges (María's call). Then two arms run on this machine, one at a time: a control on main after #1550, and this branch's head. Each is a spine and a calibration, at a review date of 10 November 2026 or later on #1550's feed. Their results follow in a comment: both arms' gates, the fit, the first stage where the spines differ, and the rows each release moves, with rows of the SPI channel as classes.
Tests
test_uk_tax_band_measure.pyhad pinned a known gap "so a fix shows", and 2.177.2 is that fix. The frozen eFRS candidate receipt measures the terminal-date column against its engine default, which 2.176.1 flips; the receipt keeps its original engine provenance. Those files and UK November event data, PR2: feed re-pin, trading allowance claim status, Scottish council tax and NSND, young people and PIP rows, UC take-up age fit, PIP points, UC limited capability #1550's touched engine files then pass (22 tests). The bump's checklist tests pass: the CGT projection, bus parity,UK_HBAI_GROSS_INCOME_DEDUCTIONS, the uprating pins, the bonus anchor and all 13 concept-mapping tests.--junitxml. 3,904 tests: 3,877 passed, 25 skipped and 2 failed.test_us_release_head_to_head_scorer, whose guard refuses this machine's Python 3.14.6.tools/ci_test_plan.py verify;tools/spec_engine_coverage.py --check(42,394 of 42,394 fields, 41 of 41 inventory checks);tools/refresh_concept_coverage.py --engine policyengine-uk --check;--check;--check; the H parity test (1 test) passes.Signatures
Awaiting María's signature: the three signed defaults, with the error each can make.
Not in this PR
sublet_income, which 2.176.0 now allows (Move SUBRENT from property_income to sublet_income, after policyengine-uk reads sublet_income policyengine-uk-data#508's order).obr.vatrebind, whose condition in María's ruling of 24 October 2.177.0 meets.Disclosure
No figure in this PR, its commits or its changelog rests on survey records. The numbers are policyengine-uk's parameters and versions, and published figures cited as their publishers'.
🤖 Generated with Claude Code