Repository navigation
UK pre-Budget data: measure stored values at their period, draw Carer's Allowance claims, and the #1278 items (#1324, #1319, #1278) - #1329
Conversation
A plain-column binding's value variable is read at its measurement period: the binding's measurement_period, else the calibration period. When the frame stores the variable at its own period (2024), the measure resolver's probes report it missing, so the provider computes it at 2025, as it does every engine-computed variable. Engine values for stored names are injected under a reserved engine_period__ name, so filters, conditions and bands keep their stored reads and the stored columns are never overwritten. A declared period other than the calibration or the frame's period refuses. The profit after loss relief reads the frame only at the frame's period. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eriod (#1324) ONS road fuel binds its calendar-2024 figure on the frame's own 2024 petrol and diesel columns (measurement_period 2024, require_matching_fact_period), under a signed matched_period hold, so the row no longer depends on the engine's fuel projection. The seven bus and rail outturn rows held without an index declare the frame's period, which keeps their measurement and makes it explicit. The England fare-receipt rows and the Northern Ireland bus receipts row carry 2025 facts and go to the engine at 2025. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tools/check_uk_measurement_periods.py rebuilds each plain-column row's value route from the run's calibration diagnostics, the resolver's attached routes in build_record.json and the stored columns of the spine it read, and writes a receipt of periods and route labels. It names any row whose stored value was read at a period the frame does not hold, and warns rather than fails unless --strict is given. On the 19 October national build it names the 75 rows #1324 lists that are not now declared, and the three bus fare rows that carry 2025 facts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The national graph route and the dense line's full-measure route resolve the packaged OBR statutory maternity pay row, whose value the frame stores at 2024, through the engine at the calibration period, and leave the stored column as it was. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#1278, #1095. The national 0-4 bands by sex bind, but the single years inside them were free to move. Three national rows now bind ages 0, 1 and 2 for all persons, on the 15-19 split's precedent (2da556a). Each reads the ONS mid-year estimate for the UK at one single year of age, the series the 0-4 bands sum, and counts people with age >= n and age < n + 1. Unlike the 15-19 split, the 0-4 sex bands keep their incumbent mapping and stay bound: the new rows cover both sexes and stop at age 2, so neither band is their sum. Registry accounting: the three rows are contract-only declarations. The contract has 421 targets (418), the registry scope 362 (359) and the unmapped declarations 176 (173); the mapped targets stay at 186. The compile-parity tool gains the rows' ledger-only rationale. Not regenerated here: the target references, the membership report and the 2025 compile-parity receipt go to the PR's pin pass, which takes the active references from 1,319 to 1,322. Until then the reference-count tests read the committed 1,319. On a cut of the pinned feed (abf0921) each new row resolves at K02000001 with one member at 2025. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…kings (#1278) María's ruling of 2026-10-20 on the pre-Budget PR: the two plan-2 student-loan borrower exclusions are renewed, not made diagnostics. slc.borrowers.plan_2_liable and slc.borrowers.plan_2_above_threshold carry approved_on 2026-10-20 and expires_on 2026-11-26, the November PR's renewal date; María confirmed both on 2026-10-20. They keep tracking #1278. Their reasons quoted SLC's academic year 2025/26 figures, but since #868 the rows bind 2024/25 (Table 6a: 8.94M liable, 3.985M above the threshold). They are restated on those, and on the 18 October spine, whose student_loans stage exhausts its top-up pool at 41 percent of the liable stock. That spine carries 3.70M liable and 1.56M above the threshold at design weights; the 19 October national file carries 3.54M and 1.51M at calibrated weights. All four are weighted totals over thousands of rows. The adjudications record the renewal and the restatement. Two tracking fields named closed issues and now track #1278, with nothing re-signed: - the SLC in-year-snapshot uprating hold (#868); - the obr.vat exclusion (policyengine-uk#1996). Its adjudication notes that policyengine-uk#2187 closed #1996 in 2.135.7, and that the rebind waits on a lock bump past 2.135.7. The A16 block of test_packaged_exclusions_load and the consumption-tax tracking pin follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1278) uk-data#482 (open) adds eight columns, band_A_amount to band_H_amount, to storage/la_council_tax.csv: each English authority's 2026-27 amount for one band from MHCLG Table 9, its Band D amount times the band's statutory ratio. Like Band D they are rates, not additive household controls. local_council_tax_band_d_rate's reason now names them, so the next re-pin does not port them as targets. The register is regenerated with tools/census_uk_data_target_parity.py and its --check passes; this is the one generated file this commit carries. test_uk_data_target_parity pins the named columns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
policyengine-uk reads state_pension_reported back to a weekly amount at 52 weeks a year before comparing it with the full rate, so the spine's 365.25/7 put every full-rate pensioner 0.34% above the full rate and made the excess a protected payment. In 2026-27 the full new State Pension is £12,547.60 a year at 52 weeks, below the £12,570 personal allowance, but it read above the allowance. The State Pension alone now annualises at STATE_PENSION_WEEKS_IN_YEAR (52), María's ruling of 2026-10-20 and an exception to #1095's weekly amounts. WEEKS_IN_YEAR and the HMRC replay's SRP leaf keep 365.25/7. The frs_spine stage declares the exception in a new weeks_in_year_exceptions field of its annualize_periodic_amounts operation, in sources.yaml, its source_stages.json projection and the sources schema. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1278) From 2024-25 the FRS no longer asks how much council tax a household pays; DWP derives CTANNUAL from the band. Some households that answer yes to CTPaid ("Does anyone living here pay Council Tax?") and report no reduction still carry a zero CTANNUAL, and frs_council_tax kept the zero, leaving England's share of zero bills well above Wales's and Scotland's. Such a household (CTPAID 1, CTREB not 1, CTANNUAL 0) now takes its region, band and single-adult cell mean, as a missing bill does. A non-recipient's zero bill otherwise stays zero: CTPAID 3 (the household does not have to pay) or CTPAID 2 (the council pays, with no reduction reported). frs_council_tax reads CTPAID and refuses a tab without it, and the impute_cell_means declaration's missing rule changes in sources.yaml and source_stages.json together. The spine test fixture and the H2 fixture tool carry CTPAID, and the tool adds one paying household with a zero bill. The bill level waits until after the Budget. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ALLPAY2, the FRS 2024-25 "Amount of allowance: organisation", is one amount, but the spine summed it into both miscellaneous_income and private_transfer_income, so every total adding the two counted it twice. It stays in miscellaneous_income only (María's ruling of 2026-10-20); private_transfer_income sums APAMT, APDAMT, PAREAMT, ALLPAY3 and ALLPAY4. A new test copies a fixture household once per field of its adult, child, household, odd-job and pension rows, raises that field in its copy, and refuses any field that moves more than one person income column; on the old lists it names ALLPAY2. The spousal-maintenance split in #1320 waits on uk-data#627. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
would_claim_carers_allowance followed reported receipt (#882), and a carer above the earnings limit cannot report the allowance, so no reform that widens it reached a new claimant. That includes the April 2025 rise of the limit from £151 to £196 a week, which the Independent Review of Carer's Allowance Overpayments (July 2025, chapter 7) estimates brought about 61,000 more people into eligibility. A new ungated spine stage, carers_allowance_take_up, runs after child_benefit_take_up and before uc_deduction_attributes. It keeps reported receipt as the anchor (frs_spine sets it, the SPI income chain refreshes it on the rows it redraws) and refuses a frame whose flag no longer follows it. One consumed-only engine materialization at the survey year reads is_gainfully_employed_for_carers_allowance on the frame's own values, at the 2024-25 limit of £151 (the engine reads a year's parameters at 30 April); a frame at any other period is refused. A person outside Scotland whose care_hours reach the engine's gov.dwp.carers_allowance.min_hours, who reports no allowance and whom that test holds gainfully employed claims at the take-up contract's new carers_allowance_newly_entitled rate, on a uniform keyed on person_id (seed 0, salt would_claim_carers_allowance): would_claim = reported OR (eligible AND u < rate). Reporters stay true, carers under the limit who report no allowance stay false, and Scotland stays closed, since Carer Support Payment reads the same flag and the engine applies it no earnings test. The stage uses the existing assign_binary_from_rate operation, so the schema and the operation vocabulary do not move. The earnings test is read before salary_sacrifice moves some contributors' pension amounts out of their pay, which lowers the earnings the engine tests by about half the amount moved. A drawn carer whom that conversion takes under the survey year's limit keeps the flag, although the released file then shows them entitled and not reporting. Reading the converted pay would need the stage after salary_sacrifice, with a lineage-keyed draw for the CGT clones; the module and the notes say so. The rate, 0.6 with a sensitivity of 0.45 to 0.75, is María's ruling of 2026-10-20. No published take-up rate exists for newly entitled carers, so the contract entry is frozen_by_adjudication, with the earnings-limit back-test against the 61,000 as its follow-up. The receipt bands support on distinct household_source_id, gives a weighted total only where ten or more sources carry it, and gives the realised share only where neither side rests on one to nine. The stage has no health gate, and the flag stays out of the terminal take-up signal gate. As for the Pension Credit and Child Benefit redraws, the graph opens an isolation boundary before the rewrite and declares an open input surface. The kernel tables, the spine registration, the stage JSON, the stale notes on the anchor and in the policyengine-uk concept mapping, the roster pins (45 to 46 stages) and the H2 fixture tool move with it. The fixture gains 35-hour carers on both sides of the limit, in Scotland and outside it, and Carer's Allowance rows, so the stage draws there. The coverage manifest and the H2 fixture are left for the pin pass to regenerate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The SPI band-donor receipt records a band's mean realised total income only where its carriers drew at least ten distinct tape records, and "<10" otherwise. - Twenty-three measure-exclusion reasons (the 1m-and-over and 500k-1m HMRC band cells, and the benefit-cap amount bands) are restated in aggregate terms. Their meaning, decisions and windows are unchanged. - hmrc_spi_income_spine binds spi_income as a helper module, so an edit there moves the stage's implementation hash, as it already did for property_components. A test holds both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
) The uk.full.problem kernel and the rotated holdout kernel reviewed the local binding adjudications on the wall clock. The target compilation already reviews the measure exclusions on the build's review_date, and #1306 (E) let prepare_uk_full_solve and rotated_uk_local_holdout take a date (77febc5, 67e54c4); the two kernels now pass it. - uk.full.problem carries review_date in its parameters, and its kernel passes it to prepare_uk_full_solve as now. - uk.full.holdout inherits it with the problem's parameters, and its kernel passes it to rotated_uk_local_holdout, so every fold reviews on it. Tests: a prepared build puts the solve's review date on both nodes. At the kernel level, the problem kernel passes its date and refuses one past the committed register's windows; the holdout kernel refuses such a date, and every fold it runs receives the build's date. These three fail on the old kernels. The review-date changelog fragment loses its "is a follow-up" sentence. No effect on a build before the Budget: the earliest local adjudication expires 2026-12-15. A changed review date now re-keys the problem and the holdout as well as the target compilation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
María's ruling of 2026-10-20: run a national arm with orr.rail_government_support held out beside the calibration-period fix's arm (#1324). Commit the hold-out only if the gates pass and the share of rows within 10 percent holds; otherwise keep the row bound and label the distributional tables. The arm passed: 7/7 terminal gates, and 99.1% of the rows both arms bind within 10 percent (98.8% with the row bound). The row binds ORR table 7270's broad total of government support to the railway. The frame's household rail subsidy sits far below it at design weights, so the solve closes the gap by moving weight onto rail-using households. That also moves untargeted columns that correlate with rail use. The 7270-versus-7271 basis ruling stays open (#890 G). The entry carries approved_on 2026-10-20 and expires_on 2026-12-11, which María confirmed on 2026-10-20, and tracks #1278. The exclusion census gains 'orr.' and the register 58 entries (57). The national arm reads the same file by --measure-exclusions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Regenerated with tools/generate_uk_target_references.py from the pinned feed abf0921 (source_fact_feed chronicle-uk-abf0921-consumer-facts). The active references go from 1,319 to 1,322 with the ONS single years of age 0, 1 and 2. The contract's measurement_period 2024 is mirrored onto ONS road fuel and the seven held bus and rail rows, and road fuel's selector reads its calendar-2024 observation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e fixture (pin pass) The national compile-parity receipt (tools/build_uk_ledger_compile_parity_signed_differences.py --surface national) adds the three ONS age rows as ledger-only and reads road fuel's calendar-2024 figure; the local receipt does not move. The release input coverage manifest re-hashes the resources this PR changes, and the charter-H2 spine fixture is regenerated with the rows the fixture tool gains here. Both --check runs pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@juaristi22 thanks, this is my review at Verdict. I found nothing that blocks the 22 October build. The #1324 period change does what the body says, and I traced the engine route end to end: a stored column read at 2025 goes to a pe-uk simulation that extends the 2024 dataset with What I ran
Findings
NitsA. B. The DWP benefit statistics February 2026 page, which the take-up contract cites as C. What looks right
🤖 Generated with Claude Code |
A plain-column binding that declares the frame's period (2024) while the run calibrates at 2025 reads the stored column. An engine-computed value variable has no stored column, so the resolver computed it at 2025 and the row was measured there under the declared period, with nothing refusing (Vahid's review on #1329, finding 1). The guard now asks the adapter which period each value variable holds without the engine. UKFrameTargetAdapter.value_period gives the frame's period for a stored column, the year in the name for a dated CGT measure such as cgt_2024_tax, and none otherwise. The guard refuses unless every value_variable or value_expression term holds the declared period. The dated-measure rule moves to cgt_calibration.UK_CGT_DATED_MEASURE, so the measure provider and the adapter share one copy. No packaged row changes: the plain-column rows that declare 2024 read stored columns (petrol, diesel, bus and rail) or cgt_2024_tax. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#1319) Scotland stays closed in the Carer's Allowance draw because Carer Support Payment reads the same flag. The reason given was that the engine applies CSP no earnings test, which read as if CSP had none. In law it has an earnings limit, as the allowance does (mygov.scot, "If you work"), and policyengine-uk's carer_support_payment_pre_overlap does not yet apply it (Vahid's review on #1329, finding 4). The module, the stage's eligibility and notes in sources.yaml and source_stages.json, and the changelog fragment now say so. The coverage manifest and the H2 fixture follow in the pin commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The docstring and the changelog fragment said that from 2024-25 the FRS no longer asks the amount and that DWP derives CTANNUAL from the band. Section 1.3 of the FRS 2024-25 background information and methodology says that the band and some other Council Tax block questions left the field interview from April 2024, that editing teams input the band, and that the other answers are imputed during DWP's validation. It does not say that CTANNUAL is derived from the band, or whether CTPAID is asked or imputed. Both texts now quote it (Vahid's review on #1329, nit C). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
England's bus fare receipts now read the engine's 2025 fares and end about 10% above their target, because policyengine-uk gives every single ticket in England outside London one uncapped fare. The fragment says so and points to policyengine-uk#2542 and microcosm#1331, so that a costing of a bus fare cap change on this release is not read as final (Vahid's review on #1329, finding 5). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pin pass) The Carer Support Payment rewording changes the carers_allowance_take_up stage's eligibility and notes in source_stages.json, so the release input coverage manifest re-hashes the stage manifest, and the charter-H2 spine fixture carries the new text. Both --check runs pass. The compile-parity receipts and the target references do not move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@vahid-ahmadi thank you, this is a careful review. The changes are on top of 1. A declared frame period on an engine value. Fixed in 9d54588.
2. The eligible pool and the 0.6. Agreed on both points. The pool counts care for anyone, and it holds every carer over the 2024-25 limit, not only those who come under £196.
3. Salary sacrifice. Agreed: such a carer is paid in the baseline, so this is not only about how far reforms reach. The same back-test counts them, as drawn carers whom the released file holds under the survey year's limit. The move after 4. Carer Support Payment. Reworded in 3c3b473. Scotland now stays closed "since Carer Support Payment reads the same flag and policyengine-uk does not yet apply its earnings limit". The new wording is in the module, the stage notes and eligibility, and the changelog. The coverage manifest and the H2 fixture are regenerated in 2279fe8. The engine gap is PolicyEngine/policyengine-uk#2548. 5. Bus fares. The body now links PolicyEngine/policyengine-uk#2542, the draft fix PolicyEngine/policyengine-uk#2546 and #1331. The #1324 changelog fragment now says that a costing of a bus fare cap change on this release likely overstates its cost and gains (3d765aa). 6. Merge order. Agreed: this PR tonight, then #1333 with the measurement-period receipt, the Carer's Allowance receipt and the 52-week State Pension check re-run on its lock, then #1332. Nits
🤖 Generated with Claude Code |
|
@juaristi22 thanks, this is my second review, at Verdict. Nothing in the delta blocks the 22 October build. The new period guard closes finding 1 properly, and the Carer Support Payment, bus fare and council-tax wording are fixed. Findings 2 and 3 and nits A and B are deferred to #1319, and I accept your reason why the stage receipt cannot carry the count. One thing I got wrong in round 1: the merge order. #1333 is stacked on #1332, so the order has to be #1329, then #1332, then #1333 (see item 6). I have one new ask and one nit. What I ran
Round-1 items
New
What looks right
🤖 Generated with Claude Code |
Merges origin/main at 37c1684 ("Merge pull request #1297 from PolicyEngine/orrery-graph-reconstruction"), which brings in #1297 as merged (head 065a434) and #1329 (211483f, with the #1278, #1319, #1320 and #1324 work it carried). No file conflicted. #1297's merged head 065a434 has the same tree as the pre-rebase #1297 head 94a5bff that this branch had merged, so every #1295 and #1297 file now equals main's version. docs/uk-full-build-graph.md merged automatically: it keeps #1329's 46-stage spine count and this branch's per-epoch telemetry sentence. After the merge, this branch's diff against main is the same nine-file patch it had against the #1297 head 94a5bff. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-schema Merges #1296's branch at 0b766e7, which merged origin/main at 37c1684 (#1297 merged as 065a434, and #1329 at 211483f). No file conflicted. packages/microcosm-build/tests/engine_free/uk/ test_uk_graph_terminal.py merged automatically: it keeps #1329's new tests and this branch's JSON Schema test of the final validation-check kernel's diagnostics. docs/agent-guide.md keeps #1297's version from main plus this branch's JSON Schema section. Nothing was regenerated. main has not changed microcosm-diagnostics, any pyproject.toml or uv.lock since this branch last merged #1296, so generate_calibration_diagnostics_json_schema.py --check reports the committed schema current, uv lock --check passes, and APPROVED_UV_LOCK_SHA256 still equals the SHA-256 of uv.lock (751721b231ab8cc6b3d10164f61ca429f5171661951494503fb0873e3f67b117). After the merge, this branch's diff against #1296's branch is the same 22-file patch it had against b0406fd; only the hunk offsets in test_uk_graph_terminal.py moved, because #1329 added tests above them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The keyed draws change the hermetic H2 fixture's CGT asset-type facts and property purchase targets, and main (#1329, #1295) moved the same two files, so they are regenerated on the rebased tree with tools/graph_uk_spine_fixture.py; --check then passes. They are re-derived synthetic aggregates with no record-level data. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The data fixes for the 22 October national and dense build: #1324's calibration-period fix, #1319's Carer's Allowance draw, and the items #1278 lists before the pre-Budget build. It is one PR with ordered commits and one pin pass at the end, so each commit reads on its own. It must be on main by 21 October 23:59.
Closes #1324. Part of #1319: the draw lands here; its stage-health gate, the overlap rule and a bound caseload target follow after the Budget. Part of #1320: ALLPAY2 is counted once here, and the spousal-maintenance split waits on PolicyEngine/policyengine-uk-data#627. Part of #1278 and #1095.
Summary
#1324. Stored value columns measured at their binding's period
value_expressionare now measured at the binding's period: itsmeasurement_period, else the calibration period.engine_period__name. Filters, conditions and bands keep their stored reads, and the stored columns are never overwritten.matched_periodhold. The row no longer depends on the engine's fuel projection.person_bus_fare_spendingprices each fare-paying boarding at the 2024-25 yield, and moves only single tickets in England outside London with the cap. It gives every single ticket one uncapped fare, £2.748, inferred from the 2024-25 cap grant.tools/check_uk_measurement_periods.pyrebuilds each plain-column row's route from a finished run. It writes a receipt of periods and routes, and names any stored value read at a period the frame does not hold. It warns and does not fail, unless--strictis given. On the 19 October national build it names the rows UK national calibration reads stored input columns at the frame period: 76 £ rows compare 2024 values with 2025 targets #1324 lists.#1278. Register items
2da556a5a). The references go from 1,319 to 1,322.Spine riders
state_pension_reportedback at 52 weeks, so 365.25/7 put every full-rate pensioner 0.34% above the full rate. This is an SP-only exception to UK: track the defects uk-data is fixing that microcosm still has #1095's weekly amounts.#1319. Carer's Allowance claims for carers over the earnings limit
would_claim_carers_allowancefollowed reported receipt. A carer over the earnings limit cannot report the allowance, so a reform that widens it reached no new claimant. The April 2025 rise of the limit from £151 to £196 a week brought about 61,000 more people into eligibility (Independent Review of Carer's Allowance Overpayments, July 2025, chapter 7).carers_allowance_take_up, keeps reported receipt as the anchor. It opens the flag at one rate (0.6, sensitivity 0.45 to 0.75) to carers outside Scotland whom only the earnings test keeps from the allowance. The draw is keyed on the person's identity.Hygiene
uk.full.problemand holdout kernels review the local binding adjudications on the build's review date, not the wall clock.Pin pass
measurement_periodmirrored onto road fuel and the seven held bus and rail rows. The second regenerates the national compile-parity receipt, the release input coverage manifest and the charter-H2 spine fixture; the local receipt was regenerated and does not move.gates.jsondoes not move.Verification
Touched tests locally. The full suite runs in CI.
Control national at
a90eec3cb: 7/7 terminal gates; 98.4% of 1,215 rows within 10%.UK national calibration reads stored input columns at the frame period: 76 £ rows compare 2024 values with 2025 targets #1324 arm (the four UK national calibration reads stored input columns at the frame period: 76 £ rows compare 2024 values with 2025 targets #1324 commits on the control spine): 7/7 terminal gates; 98.8% of 1,215 rows within 10% (control 98.4%). The measurement-period receipt names no stored value read off its period; on the control it names 78 rows.
Rail hold-out arm (the UK national calibration reads stored input columns at the frame period: 76 £ rows compare 2024 values with 2025 targets #1324 arm with the ORR row held out): 7/7 terminal gates; 99.1% of the 1,214 rows both arms bind are within 10% (98.8% with the row bound). Three rows come back inside 10%, England's bus fare receipts among them (+9.6%), and none goes out.
Spine twin (the spine riders and UK Carer's Allowance: would_claim follows reported receipt, so earnings-limit reforms reach 4,600 new carers against an official 61,000 #1319) against the control spine:
Combined arm (every commit, on the twin spine): 7/7 terminal gates, and the measurement-period receipt names no stored value read off its period.
obr.carers_allowancegap before the solve narrows from −11.6% to −10.1%, and the UC carer element from −15.3% to −14.0%.Review round 1 (Vahid, 21 October; no blocker): four follow-up commits and a pin commit.
For review
juaristi22/ 2026-10-20: the road-fuelmatched_periodhold (expires 2026-12-11), the plan-2 renewals (2026-11-26) and the rail entry (2026-12-11).CTPAIDis asked or imputed.Not in this PR (after the Budget)
🤖 Generated with Claude Code