Skip to content

Briefing wording: top-decile reason, Pavel's review points, PTA qualifier - #1495

Merged
MaxGhenis merged 4 commits into
mainfrom
copy/budget-briefing-d2159-wording
Oct 29, 2026
Merged

MaxGhenis merged 4 commits into
mainfrom
copy/budget-briefing-d2159-wording

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Max's go (d2159, 29 October): one wording PR for the live Autumn Budget briefing. It covers the top-decile clause, Pavel's wording points from his live review of #1469, a qualifier on "pay no income tax", and the Pension Tax Allowance post's comparison with the OBR. Every existing figure, link and table cell stays the same. The PR adds one link: the Treasury's PTA explainer, as a Table 1 source. The PTA post's new figures all come from the dashboard's own note; the PTA section below traces each one.

1. The top decile's path (d2159)

Where Was Now
Briefing L8 "…rising to £56 in 2031-32, as property income tax rates rise." "…rising to £56 in 2031-32, because the property income rate rise takes a little more from it each year."
posts.json description (page meta, og:, twitter: and JSON-LD) "From 2028-29 they raise £166 million to £301 million a year, as property income tax rates rise." "…because the higher rates on property income bring in more than the other measures cost."
Briefing L76 (Pavel's audit item 4 lists it too) "…the highest most, as property income tax rises." "…the highest most, from the property income rate rise."

The rates rise once, in April 2027. The new wording follows the per-measure results in manifest revision 17 (winners_losers.csv, top decile, £ a year):

2028-29 2029-30 2030-31 2031-32
The package −49.90 −51.46 −53.69 −55.84
Property income rates −59.55 −61.78 −63.76 −65.56
Trading allowance +9.28 +9.61 +10.02 +9.62
Pension Tax Allowance +0.37 +0.71 0 0
Carer's Allowance taper 0 0 +0.05 +0.09

From 2028-29 to 2031-32 the package's loss grows by £5.94, and the property measure's by £6.01. The Pension Tax Allowance's end moves the top decile by less than £1. In 2029-30 the property measure is the only one that takes money from deciles 7 to 10 (−12.1, −17.4, −25.9 and −61.8). The description now says what L62 and Table 3 already show: property income raises £412 million to £459 million a year, more than the other measures cost in every year from 2028-29.

2. Pavel's wording points (his live review, parts 2 to 5)

Point Change Source
1. Abbreviations Expanded at first use: RPI (Table 1), DESNZ (Table 2, bus fares), ISA (Table 2, cash ISAs), OBR (Table 2 source line), CPI and ONS (zero VAT note). A line under Table 6's note expands NICs, PSCE, RDEL, AME, BGA and CT. OBR EFO: "public sector current expenditure (PSCE) in RDEL"; costings: "Retail Prices Index (RPI)"
2. Zero VAT spending bases "DESNZ's domestic electricity volumes (Energy Trends) and the average prices households pay (Quarterly Energy Prices)"; "ONS consumer spending, which in the ONS's Consumer Trends series for household electricity is 10% to 12% lower" microcosm changelog for #1113 ("priced at QEP's calendar-2024 averages paid and levelled to the DESNZ volume"); dashboard#297 (Consumer Trends 0.88 to 0.90 of our base); microcosm#1418 item 12 ("ONS 04.5.1 is 12% lower"). The costing itself says only "ONS consumer expenditure data", so the text doesn't name the series as the costing's.
3. Fuel duty baseline "…fits the baseline the official documents describe, in which the full 5p returns on 1 January 2027 (about £555 million on 45 billion litres): the policy costing says the measure extends the cut "from 1 January 2027 to 1 July 2027", and the OBR describes the pre-Budget plan as a "delay of the reversal until January 2027". The law instead restores 3p of the 5p then and the other 2p from 1 March (about £410 million)." Policy costings, fuel duty note; EFO October 2026, chapter 3. Both quotes are exact.
4. "later this week" Already gone: #1492 replaced that section with "Limitations".
5. Cash ISA "…limit stays at £20,000, reversing a cut for under-65s that the government had announced" Costing: "reverses the previously announced reduction in Cash ISA limit from £20,000 to £12,000 for individuals under 65"; Budget para 2.52. The £12,000 stays out, to keep the PR's figures to the ones it already has.
6. Scope words Student loans: "; the costing uses the Student Finance Modelling Unit's forecast for English borrowers". Universal Credit: ", for claimants in Great Britain". Costing: "The cost base is primarily the Plan 2 and Plan 3 modified interest components of the Student Finance Modelling Unit forecast for English borrowers"; "primarily" modifies the components, not the borrowers. Budget para 6.11: "Universal Credit claimants in Great Britain". The Budget doesn't limit the student loan cap to England, so the text describes the costing's base, not the cap.
7. Distributions "as capital gains "where dividend Income Tax treatment is more appropriate"" Costing, distributions note, word for word
8. "or reaching it during the tax year" Table 1's sources add HM Treasury's Pension Tax Allowance explainer for that clause. The link returns 200. Explainer: "people who are above State Pension age, or those who reach State Pension age within the tax year"
9. Treasury comparison (L125) "It leaves out two of ours, the Household Energy Payment and the Carer's Allowance change, but neither has any effect in 2027-28. Its figures for that year differ from ours in three other main ways: they include the savings income rate rise, which we leave out, and 12 other measures we don't model; they include benefits in kind from public services; and each of its deciles holds a tenth of households, where each of ours holds a tenth of people." Impact on households: para 1.4 lists 18 measures (5 ours, savings, 12 others); Figures 1.A and 1.B have a "Benefits-in-kind from public services" bar; paras 2.7 and 2.8 rank households and split "this ranking into ten equally sized groups". Ours: household_income_decile in PolicyEngine UK 2.151.0 is "person-weighted". Pavel suggested "equivalised net income" as the difference, but both rank by equivalised net income before housing costs, with the HBAI factors, so the text names the weighting instead.
10. Reason label "Carer's Allowance taper (scope)" The bullet's explained parts are Scotland's block grant and the income tax netting; the dashboard labels both "Scope".
11. Triple Lock "£15 billion a year in cash terms by the late 2030s" Budget footnote 61 cites DWP's State Pension uprating analysis, whose figures are cash (Triple Lock post L7)

3. "Pay no income tax" (briefing L153)

"…whose total income is no more than the full new State Pension pay no income tax if they have the standard Personal Allowance and the 20% basic rate applies to all their taxable income. The full allowance covers tax at 20% on the gap between the Personal Allowance and the full new State Pension, so a higher rate, such as the 24% rate on property income from April 2027, can still leave tax to pay."

The explainer says otherwise in one place. It says pensioners at or below the full new State Pension "will not be brought into paying tax because of State Pension uprating in this Parliament. This applies regardless of where your income comes from, whether that is the State Pension, a private pension, earnings from work, self-employment income, savings, property or dividend income, or a combination of these." Its own numbers point the other way:

  • The full allowance is "worth up to £94".
  • For Scottish taxpayers it is "calculated using the 20% basic rate rather than the Scottish starter rate".
  • Other allowances "are taken into account before the tax reduction is applied to your remaining income tax bill".

A £94 reduction can't clear 24% tax on the £466 gap (£112). The briefing gives that reason in a sentence, so a reader can square it with the explainer. The PTA post says the same at L978, with the £18 example. The dashboard's modifier also caps the reduction at the allowance.

The PTA is a tax reduction, not extra tax-free income. The explainer calls it "a tax reduction", and the dashboard's modifier reduces income_tax by up to £94. It is 20% of the gap between the full new State Pension and the Personal Allowance, so it clears the tax when that income pays 20% or less. The wording follows the PTA post's own L7 and L978, which gives a worked example: £11,000 of State Pension and £2,036 of property income still pays £18. The condition is sufficient, not necessary: savings in the starting-rate band, for example, also leave no tax to pay.

4. PTA post: our income tax cut beside the OBR's

Added after the OBR's figures in "Comparison with the Treasury and the OBR": "PolicyEngine's income tax cut, £42 million, £112 million and £193 million, falls about 5% short of the OBR's in 2027-28 and exceeds it by 35% and 34% in 2028-29 and 2029-30. Our data also has more pensioners who pay less income tax: about 670,000 in 2027-28, against the Treasury's 500,000."

The count sits beside the comparison but isn't offered as its cause. It is a 2027-28 count, and 2027-28 is the one year ours falls short; nothing shows that it explains the later-year excess.

Every figure comes from the dashboard's note for state_pension_income_tax_protection (src/utils/obrDeviationNotes.js on dashboard main 1eca3182): "Ours is £42m, £112m and £193m: about 5% lower in 2027-28 and 35% and 34% higher in 2028-29 and 2029-30. More pensioners gain in our data (about 670,000 in 2027-28, against the Treasury's 500,000)." The note says "gain". The post says "pay less income tax", because the count is people whose own income tax falls: that was #1487's correction (d2170), and it matches the post's L757. The note gives no reason for the 2028-29 and 2029-30 excess: its panel tags the count as a "Coverage" point for 2027-28 only. So the post adds the comparison and the count, but no reason, and it keeps L757's "we have not established why" for the counts. The "why" behind the later-year excess is still open.

5. Table 2's selection rule

It needs one, but no criterion fits its current rows. Parental Allowance (measure 6, −£70 million a year from 2029-30 in Table 6.1) and the First Time Buyer ISA (38) are out, while the smaller Lifetime ISA change (39) is in. Two measures that ended before the Budget (66 and 67, −£310 million and −£145 million in 2026-27) are also out. Making any criterion true would mean adding rows and figures, which this PR's rules exclude. So the PR states what the table is:

  • the caption reads "Some other household measures we don't model";
  • the bullet above it reads "Table 2 gives the official costings of some of them";
  • the source line adds "The table gives a selection of the household measures in Table 6.1." Every row has a Table 6.1 number. Table 6.1 itself isn't complete: its footnote 2 leaves out measures "with no net increase to borrowing", such as the landlord registration fee, and AME and tax costings under ±£10 million in every year.

A complete table, with a stated rule, would be a content change with new figures and needs its own go.

Reviews

  • Coordinator, at 3b15599. Read the whole diff and asked for three changes. 2c756b5 makes them:

    • the PTA post's count no longer reads as the cause of the excess;
    • L153 gives its reason;
    • student loans "uses the forecast".
  • Opus 5.5, in session, at 2c756b5 (run while the Codex lanes were held): APPROVE WITH CHANGES. It found that "Table 6.1 lists every measure" contradicts Table 6.1's footnote 2. It also found:

    • "three other ways" reads as a complete list, while the Treasury also uses its own model (IGOTM) on pooled FRS and LCF data (para 2.11);
    • section 4 of this body said the note gives a reason for the later years;
    • nits: the student loans antecedent, "raise" twice in the description, and LPG.

    The next head, e0274f9, fixes all of them. "Cash ISAs" in column 1 stays as it is; the expansion sits in the same row.

  • Opus 5.5, in session, at e0274f9: every round-1 fix holds; it found the "selection" sentence true for all 11 rows. It asked to confirm that the PR changes only the three posts: the review packet's diff had been taken against a main that had since gained Scroll wide research-post tables inside their own container #1472 and Energy bills post: readability pass #1494. gh pr diff 1495 --name-only lists only the three posts, and the corrected packet diff matches GitHub's byte for byte. It also fixed two lines of this body: section 4's heading, and footnote 2's "AME and tax" costings.

  • GPT-6.1 Sol r2b, after the merge, at e0274f9 (out-sol-r2b.md): APPROVE WITH CHANGES. Its arithmetic, quotes, L153 and L990 checks all hold. It found two problems:

    • In this body, "only when that income pays 20%" contradicted "sufficient, not necessary". I've corrected it here.
    • L198's "which in the ONS's Consumer Trends series for household electricity is 10% to 12% lower" can read as naming Consumer Trends as the costing's input. The costing says only "ONS consumer expenditure data". A follow-up PR, if the coordinator agrees, will address it.

Not in this PR

Checks

  • A script compared main with this branch. All 72 briefing table rows and 31 PTA post table rows keep identical numeric cells. All chart blocks are identical: 1 in the briefing, 6 in the PTA post. The only link added is the explainer.
  • The numbers that enter the text are dates and rates in policy descriptions and quotes (2027, 20%, 24%, under-65s), "Table 6.1", "12 other measures" (from para 1.4), and the PTA post's comparison figures above.
  • The added lines contain no "is/are above/below" and no new passive; I removed a reduced passive ("previously announced") before committing. Prettier formats both changed articles; Table 2's padding changes with its wider cells.

🤖 Generated with Claude Code

…fier

- Key results and the posts.json description: replace "as property income
  tax rates rise" with what the results show (d2159).
- Pavel's live-review wording points: abbreviations at first use and a
  glossary under Table 6, named DESNZ and ONS sources, the costing's and the
  OBR's own words on the fuel duty baseline, the cash ISA reason, scope words
  in Table 2, the distributions wording, the PTA explainer as a Table 1
  source, the Treasury comparison for 2027-28, a reason label for Carer's
  Allowance and "in cash terms" for the Triple Lock.
- Pension Tax Allowance: say when "pay no income tax" holds.
- Table 2: say it gives a selection and that Table 6.1 lists every measure.
- PTA post: add the dashboard note's comparison with the OBR's income tax
  line and its reason.

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

vercel Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
policyengine-calculator-next Ready Ready Preview Oct 29, 2026 3:03pm UTC
policyengine-website Ready Ready Preview Oct 29, 2026 3:03pm UTC

Request Review

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- PTA post: state the 2027-28 count beside the comparison without
  presenting it as the cause of the later-year excess.
- Briefing PTA paragraph: give the reason a higher rate can leave tax to
  pay (the full allowance covers tax at 20% on the gap).
- Table 2 student loans: the costing uses the forecast for English
  borrowers ("primarily" modifies the interest components).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Table 2 note: Table 6.1 leaves out some measures (its footnote 2), so
  say Table 2 is a selection of the household measures in Table 6.1.
- Treasury comparison: "three other main ways".
- Student loans: name the Student Finance Modelling Unit's forecast.
- Limitations: spell out liquefied petroleum gas.
- posts.json description: avoid "raise" twice.

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

Copy link
Copy Markdown
Contributor Author

Merge record for #1495. I admin-merged this at head e0274f97ce6c4c682a7e4a5464ac71ce955f22c1 with --squash --match-head-commit. GitHub made squash commit fda731d8d2683db1b7e76f73e177342f4df9c4da at 15:08:20Z on 29 October.

  • Go. Max approved d2159 at about 14:25Z on 29 October: one wording PR for the briefing, to merge on the gates. The Autumn Budget coordinator session relayed it. It covers:
    • the top-decile clause;
    • Pavel's wording points;
    • the "pay no income tax" qualifier;
    • the PTA post's comparison with the OBR;
    • Table 2's selection rule.
  • Why --admin. The main ruleset needs one approving review, and Max's account can't approve its own PR. CLAUDE.md allows --admin for exactly this case. No check had failed or was pending, no review requested changes, and the PR had no conflict.
  • Coordinator's checks. It read each head against its sources before OKing it:
    • 3b15599: the whole diff. Every new claim matched its source: the quotes, the cash ISA reversal, "in Great Britain", "in cash terms" against DWP's Table 1, the Treasury's 18 measures, benefits in kind, household deciles, and our rev 17 decile and PTA figures. It asked for three changes:
      • the PTA post's count shouldn't read as the cause of the later-year excess;
      • L153 should give its reason;
      • student loans should say "the costing uses the forecast for English borrowers".
    • 2c756b5: the delta. One commit and three lines, exactly those edits. OK on that head.
    • e0274f9: the delta. One commit that applies the Opus round's fixes. It read the delta on GitHub and checked Table 6.1's footnote 2. OK on this head, superseding its OK on 2c756b5.
  • Independent reviews. Paths are under ~/reviews/budget-coordinator/d2159-wording-pr/.
    • Opus 5.5 r1, in session, at 2c756b5 (out-opus-r1.md): APPROVE WITH CHANGES.

      • "Table 6.1 lists every measure" contradicted Table 6.1's footnote 2.
      • "three other ways" read as a complete list, but the Treasury also uses its own model (para 2.11).
      • Section 4 of the PR body credited the dashboard note with a reason it doesn't give.
      • Nits: the student loans antecedent, "raise" twice in the description, and LPG.

      e0274f9 fixes all of them.

    • Opus 5.5 r2, in session, at e0274f9 (out-opus-r2.md): plain APPROVE. Its first pass flagged a seven-file diff in the review packet. My packet diff had compared against a newer main that included Scroll wide research-post tables inside their own container #1472 and Energy bills post: readability pass #1494. GitHub lists only the three posts, and the regenerated diff matches gh pr diff 1495 byte for byte. I also fixed its two PR-body nits.

    • GPT-6.1 Sol (20261029-110616-pr1495-d2159-r2b): Subfleet held the Codex lanes, so this review hadn't started at merge time. The coordinator accepted Opus while the lanes stay held. Sol reviews the merged text once a lane opens; any finding gets its own PR.

  • CI at e0274f9. gh pr checks exited 0 with all 10 checks passing: Build, Tests, Type checking, Lint and format, Visual regression tests, Check embedded site URLs, Storybook Publish, Vercel Preview Comments, and both Vercel deployments. The PR showed MERGEABLE, with no CHANGES_REQUESTED review.
  • Scope. The live briefing, the PTA post, and the briefing's posts.json description. Wording only. Every existing figure, link, table cell and chart value stays; the only new link is the Treasury's PTA explainer, as a Table 1 source. The dashboard's own notes (fuel duty "fits … assuming", the PTA count "gain"), the newsletter and the policies-explained PDF (d2162) stay outside this PR.

This branch was successfully deployed

2 active deployments
Preview – policyengine-website — e0274f97 Deployed Oct 29, 2026 by vercel[bot]
Preview – policyengine-calculator-next — e0274f97 Deployed Oct 29, 2026 by vercel[bot]
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.

1 participant