Skip to content

Add blog post: the fuel duty cut extension in the Autumn Budget 2026 - #1459

Merged
MaxGhenis merged 75 commits into
mainfrom
claude/fuel-duty-post-ffda8b
Oct 28, 2026
Merged

MaxGhenis merged 75 commits into
mainfrom
claude/fuel-duty-post-ffda8b

Conversation

@PavelMakarchuk

@PavelMakarchuk PavelMakarchuk commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds a UK blog post that explains the Budget 2026 fuel duty measure step by step at household level: the 5p cut kept to 1 July 2027 and the planned RPI rise deferred to the same date. The main Autumn Budget dashboard does not show the measure by date or by litre.

Base: this PR is stacked on #1457 (pavel/pension-tax-allowance-post), because the post uses the line chart type that #1457 adds. The branch merges #1457's latest head (5b6eb05). Retarget it to main after #1457 merges.

Post

  • Rules from the Budget 2026 document, HM Treasury's policy costings and the OBR EFO October 2026, paragraph 3.19, in our own words.
  • Pre-Budget path: 52.95p to 31 December 2026, 55.95p from 1 January 2027 (SI 2026/164 as amended by SI 2026/555), 57.95p from 1 March 2027 (HODA 1979 s.6), and 60.59p from 1 April 2027. Budget path: 52.95p to 30 June 2027, then 60.59p from 1 July 2027. The paths are the same from then on.
  • Assumption, stated in the post: no source gives the pre-Budget April 2027 rate. We assume the RPI rise that the Budget moves to July was due in April at the same size (60.59p), as the dashboard does. With policyengine-uk's own 59.75p, the 2027-28 saving for 1,000 litres is £19.17 instead of £21.54; the post gives both.
  • Per litre, with 20% VAT on the duty: 3.6p less in January and February 2027, 6.0p in March, 9.2p from April to June.
  • Worked examples (no names) at 500, 1,000 and 2,000 litres a year. At 1,000 litres: £33.71 in total, £12.17 in 2026-27 and £21.54 in 2027-28. The post notes that PolicyEngine's tax years (from 6 April) differ from the Treasury's fiscal years (from 1 April).
  • Other programmes: the post explains why none interact: means tests use income, not spending; September 2026 and September 2027 duty rates are the same with and without the Budget, so benefit uprating does not change; marginal rates do not change. Business fuel use by the self-employed is noted as out of scope.
  • Net income and other benefits: full household_net_income for a single earner, a couple with two children on Universal Credit, and a pensioner on Housing Benefit, Council Tax Reduction and Pension Credit. Net income rises by exactly the duty and VAT saving; no benefit, income tax or NI amount changes. Effective marginal rates are the same before and after, so there is no MTR chart.
  • Two chart blocks: a bar chart of the rate by period, before and after the Budget, and a line chart of the saving by litres (a point every 100 litres).
  • Cites Table 6.1 row 3 (−£575m in 2026-27, −£780m in 2027-28, then 0).
  • Population results: from the dashboard's preview run of fuel_duty_rise_deferral (Vahid, commit 0d9dccb2, generated 28 Oct 14:30 UTC, ab2026-local-preview manifest; the four CSVs match the receipt's SHA-256 hashes), the same source Autumn Budget 2026 property income tax explainer #1460 uses. −£301m and −£521m (static, household fuel, incl. VAT) beside Table 6.1, with the scope, timing, behaviour and VAT differences from María's and Vahid's Create Donate page #290 notes; average gain £10.33 and £17.77 per household; 61% and 73% of people affected; two bar charts by income decile (£ and % of income); poverty unchanged because HBAI income does not deduct taxes on spending. Max asked for this section on Add blog post: the Pension Tax Allowance in the Autumn Budget 2026 #1457. Replace these figures when the dashboard publishes its final run.
  • Cover: a PolicyEngine title card of the two rate paths (no photo, no credit needed).

Method

pe.uk.calculate_household (policyengine 6.11.1, policyengine-uk 2.151.0) with two dated parameter reforms on gov.hmrc.fuel_duty.petrol_and_diesel, one per path. The engine day-weights the rates over each tax year (fiscal_year_blend). VAT is 20% of the duty change, as in pump_vat_on_fuel_duty_deferral in PolicyEngine/uk-autumn-budget-dashboard-2026#290; for the net income table a structural reform lowers vat by that amount, so it flows through vat_change into household_net_income, as the dashboard's apply_vat_base_change does. Rates and dates match fuel_duty_rise_deferral there (FUEL_DUTY_FROZEN_UNTIL = "2027-07-01"). The chart values agree with PolicyEngine UK to within £0.01 at every 100 litres from 0 to 2,500, in both tax years.

The net income table and the marginal rate check run on the dashboard's OBR October 2026 forecast (forecast/__init__.py and obr_october_2026.json at 069203c4, applied as a scenario before data load, as with_forecast does). The 2027-28 values are the same on the March 2026 forecast; from 2028-29 the forecasts differ, but the post's figures stop at 2027-28.

Consistency with other work: the rates and dates match PolicyEngine/policyengine-uk#2715 (Max, draft: 52.95p to 30 June 2027, then the RPI step on 1 July 2027 that used to fall on 1 April) and the dashboard's 60.59p (Vahid, d442ef77). The dashboard's own population cost (−£301m and −£521m against the Treasury's −£575m and −£780m) is a gap under investigation on #290; the post cites only the Treasury.

An independent audit recomputed every number and reran the model; it found no numeric errors. Its wording points (the April 2027 assumption, tax year vs fiscal year, HODA citation, net income definition, stated inputs, other fuels, rural relief pass-through) are fixed.

Checks

  • Website tests for components, content and lib pass locally (349 tests). tsc --noEmit is clean. No TypeScript files change. Prettier is clean on the article and posts.json.
  • I checked the post, the cover and both charts on a local dev server.

To review

  • Post date: 2026-10-28 19:00.
  • The April 2027 rate assumption.
  • Litres are fixed (no demand response) and pass-through to pump prices is full; the post states both.
  • Red diesel, the HGV road tax holiday and mileage rates are out of scope.

🤖 Generated with Claude Code

PavelMakarchuk and others added 10 commits October 28, 2026 10:10
A household-level explainer of the Budget 2026 Pension Tax Allowance:
the rules from HM Treasury's explainer, the five worked examples
reproduced in PolicyEngine UK, three charts (income tax, the allowance
by tax year, marginal rates) and the Pension Credit interaction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New posts draw charts as ```chart blocks (chart-standards.md), and the
website had no line type, so this adds one: BlogLineChart.tsx draws series
against a numeric x axis, with optional step series and labelled vertical
markers, using ui-kit's axis, grid, tooltip and legend styles and the chart
color tokens. blogChartUtils gains a thousands separator, a niceTicks option
that leaves zero out of the range, and validFormat for the x axis format.

The post's three charts become line blocks built from the PTA rules and
checked against PolicyEngine UK at every £2 of income. The text follows
the review of the dashboard's modifier (#290 at 1df76b8d): 2028-29's State
Pension is rounded down to 5p a week (£13,361.40), tax starts at £13,037.75,
the uprating reading is stated, and Scottish taxpayers, the full costing
and the adjusted triple lock rule are added. The cover is a new title card.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Pension Credit section gets a line chart of the change in household
net income in 2027-28 for a pensioner who claims Pension Credit and one
who does not. Its breakpoints come from the PTA rules and PolicyEngine
UK's £12,660.62 minimum guarantee, and agree with PolicyEngine UK to
within £0.01 at every £2 of income. "The PTA in each tax year" now comes
before "Income tax by total income".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Official parliamentary portrait of John Healey by Richard Townshend
(UK Parliament, CC BY 3.0, via Wikimedia Commons), cropped to 16:9 and
credited in imageCredit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Pension Credit section's chart now plots household net income for a
claimant with and without the PTA, like the income tax and marginal rate
charts. Line charts gain "yIncludesZero": false, which fits the y axis to
levels far from zero.

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>
Explains the Budget 2026 fuel duty measure at household level: the 5p
cut kept to 1 July 2027 and the RPI rise deferred to the same date.
Charts are chart blocks (a bar chart of the rate by period and a line
chart of the saving by litres), checked against PolicyEngine UK.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
David Howard, "Petrol pumps at Tesco, Brent Cross", CC BY-SA 2.0, via
Wikimedia Commons; cropped to 16:9, metadata removed.

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

vercel Bot commented Oct 28, 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 28, 2026 5:06pm UTC
policyengine-website Ready Ready Preview Oct 28, 2026 5:06pm UTC

Request Review

The post now shows full household net income for three example
households, with Universal Credit, Pension Credit, Housing Benefit and
Council Tax Reduction unchanged, and says that marginal rates do not
change. The cover is a PolicyEngine title card of the rate path, so it
needs no photo credit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PavelMakarchuk and others added 10 commits October 28, 2026 10:47
- Pension Credit: use the 2027-28 minimum guarantee uprated by earnings
  (£247.30 a week; the April 2027 State Pension rise of 3.9% is earnings
  growth, above September 2026 CPI of 3.5%), not the model's CPI projection.
- Worked examples: add a net income table that shows how the PTA passes
  through to Pension Credit, Housing Benefit and Council Tax Reduction.
- Charts: a point every £100 for the tooltip; the net income chart starts
  at £0; the marginal rate chart shows the effective rate from household
  net income, as marginal_tax_rate does, not the income tax rate.
- Text: who gets the PTA, the 500,000 and 290,000 counts, the Scottish rule
  from the explainer, non-transferability, the costing's signs and its
  no-behaviour assumption, qualified "pays no income tax", the 52-week and
  rounding assumptions, the 6 October State Pension age test, and the
  simplified worked examples.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A tax letter showing £0.00, pound coins, a teacup and reading glasses in
the PolicyEngine teal palette, drawn as SVG and rendered to WebP. It
replaces the portrait, so the photo credit goes.

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>
Marker labels move to a strip above the plot area, one row per marker,
so they no longer cross the data lines. The income tax chart now spans
£12,400 to £13,500, like the net income and marginal rate charts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
State that the pre-Budget April 2027 rate of 60.59p is an assumption and
give the result on PolicyEngine UK's own 59.75p; note the tax-year and
fiscal-year difference; put source quotes in our own words and drop the
spelled-out arithmetic; plot the saving every 100 litres, checked against
PolicyEngine UK at each point; state the example households' rent,
council tax and State Pension inputs; merge the latest line chart fixes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A mixed-age couple claims Universal Credit, which counts pension income
before income tax (UC Regs 2013 reg. 66), so the PTA leaves it unchanged
and the couple keeps the full PTA. The post notes the Marriage Allowance
case and the earnings case the model does not capture. The chart source
lines no longer repeat the Pension Credit estimate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Married couples keep the Marriage Allowance, which already removes the
older partner's tax, so the PTA gives nothing. Unmarried couples keep the
full PTA on pension income; on earnings, Universal Credit now takes back
55p of each £1, because the model passes the PTA into the tax that UC
deducts from earnings.

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

Copy link
Copy Markdown
Contributor

@PavelMakarchuk, I've checked e3a4bee; the post is the same at 6df8990. Every point from my 16:11 comment is fixed. There's one wording change left, plus a correction of my own.

One change: the pensioner doesn't get Pension Credit

The appendix says the pensioner "claims Pension Credit and Housing Benefit". On the October scenario they get no Pension Credit. Their income for it is £12,944, above the £12,761 guarantee, and the table rightly lists none.

Suggested wording: "...pays £7,800 in rent and £1,600 in council tax, and gets Housing Benefit and Council Tax Reduction; their income is above the Pension Credit guarantee, so they get no Pension Credit."

Correction to my 15:45 comment

I said the Budget's words are "35 million individual motorists – and businesses across the UK", so the 35 million counts motorists only. The Budget uses both forms:

  • The opening summary has "35 million individual motorists – and businesses across the UK".
  • The fuel duty paragraph has "the 35 million motorists and businesses across the UK".

Your current wording follows the first and is fine. But the Budget doesn't settle whether businesses are inside the 35 million, so "counts motorists only" was too strong.

Checked at e3a4bee

  • Net income table. It matches the dashboard's October scenario:
    • single adult £24,333 → £24,355;
    • couple £38,045 → £38,067;
    • pensioner £20,002 → £20,024, with Housing Benefit £7,682, Council Tax Reduction £1,564 and Winter Fuel Payment £200, on £13,036.40 of State Pension.
  • Gini (0.01%, 0.02%). These now read as relative changes.
  • Uprating line and "on our assumption".
  • The new 275-day row (1 July 2027 to 31 March 2028; 2028 is a leap year), and RPI from 1 April 2028.
  • The £230 baseline. It matches the Budget's footnote: "the 5p cut being reversed in April 2025, and annual RPI uprating from April 2025 onwards".
  • "Other fuels and rebated fuels, where practical". It matches the costings, page 13.
  • Deciles. They are ranked by equivalised HBAI net income before housing costs, weighted by people (household_income_decile), with shares from each decile's total net income (calculators.py).
  • The OBR sentence. "The OBR scores the Treasury's figure as fuel duty receipts, with no VAT line" matches Table 1.1.
  • The Table 6.1 link. Table 6.1 is in the Budget document's HTML, in chapter 7.

With the Pension Credit wording fixed, I have nothing else on the fuel duty content. Whether the population section goes out today is for Max and Vahid. #1459 merges after #1457, which it is stacked on.

🤖 Generated with Claude Code

Their income after tax (£12,943) is above the October guarantee
(£12,761), so the table lists Housing Benefit and Council Tax
Reduction only.

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

Copy link
Copy Markdown
Contributor

@PavelMakarchuk, Max wants the explainer posts merged today so the dashboard's Policies tab can link them. Is it OK to merge this post at 42a6de0?

  • Content. Every must-fix from my reviews is in at 42a6de0, including the Pension Credit line. I have nothing else on the fuel duty content.
  • What may still change before the merge, with no change to the post's text:
  • Figures. I'll check the population figures against Create Donate page #290's final regeneration, Vahid's freeze, before merging. If any figure moves at whole pounds, I'll update it here as a separate commit and tell you exactly what changed.

A "yes" here is enough. I'll squash-merge on it, after #1457, once CI is green.

🤖 Generated with Claude Code

@MaxGhenis

Copy link
Copy Markdown
Contributor

@PavelMakarchuk, a correction to my 16:29 comment. Your OK is still needed, but it isn't enough on its own. Merging this post also needs Max's yes, for this PR and for whether the costing section goes out before the dashboard approves fuel duty. The coordinator will put both to him after the webinar.

In the meantime, once #1457 is in, I'll merge origin/main into this branch and check the figures against #290. I won't merge until Max has said yes.

🤖 Generated with Claude Code

MaxGhenis pushed a commit that referenced this pull request Oct 28, 2026
…1462)

* Add a line chart type for blog posts, and valueLabels for bar charts

BlogLineChart.tsx draws series against a numeric x axis, with step
series, markers labelled in a strip above the plot, an x axis format, a
y axis fitted to the data on request, and a y axis width that follows
the tick labels. blogChartUtils gains a thousands separator, a niceTicks
option that leaves zero out, and validFormat. Bar charts take
"valueLabels": false when several series make the labels overlap.
chart-standards.md documents both. Used by the Budget 2026 posts
(#1457, #1459).

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

* Keep line chart axis labels, axis title and legend apart

The first x tick label no longer touches the lowest y tick label at the
plot's corner, and the legend sits clear of the x axis title. Checked on
every chart in the PTA post at 1280 and 375 pixels wide.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis changed the base branch from pavel/pension-tax-allowance-post to main October 28, 2026 16:42
PavelMakarchuk and others added 2 commits October 28, 2026 12:43
…-ffda8b

# Conflicts:
#	app/src/data/posts/articles/pension-tax-allowance.md
#	app/src/data/posts/posts.json
…370e

The two decile charts held the 0d9dccb2 preview's values, from before the
October detailed-table inputs. These are the dashboard's own
DistributionalImpactCalculator and WinnersLosersCalculator on
fuel_duty_rise_deferral at 9b98370e, the bundle's certified data and the
October forecast. They are stored to 3 dp (pounds) and 5 dp (shares), so
the charts' toFixed rounds once.

Shown values that change: decile 2, 2026-27, £7 to £8; decile 7, 2027-28,
£20 to £19; decile 10's 2027-28 share, 0.015% to 0.014%, as the text says.
Every other bar, and every figure in the text, is unchanged.

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

Copy link
Copy Markdown
Contributor

@PavelMakarchuk, I pushed one commit to this branch: be1b1cf, on top of your merge of main (da89d29). It changes only the two decile charts' data values in fuel-duty-cut-extension.md, nothing else.

  • What the charts held. Values from the 0d9dccb2 preview, which predates the October detailed-table inputs.
  • What they hold now. The dashboard's own DistributionalImpactCalculator and WinnersLosersCalculator on fuel_duty_rise_deferral at Create Donate page #290's 9b98370e, with the bundle's certified data and the October forecast. The values are stored to 3 decimal places for pounds and 5 for shares. That way the chart's toFixed rounds once: 19.495 stored as 19.5 would have shown £20.
  • Shown values that change:
    • decile 2, 2026-27: £7 → £8;
    • decile 7, 2027-28: £20 → £19;
    • decile 10's 2027-28 share: 0.015% → 0.014%. That now matches the text, which already said 0.014%.
  • Unchanged. Every other bar, and every figure in the text. The same run gives −£301m and −£521m, average gains of £10 and £18, Gini −0.01% and −0.02%, and no change in poverty.

When Vahid freezes #290, I'll check that nothing feeding the fuel measure has changed since 9b98370e, and rerun if anything has.

🤖 Generated with Claude Code

…-ffda8b

# Conflicts:
#	app/src/data/posts/posts.json
@MaxGhenis

Copy link
Copy Markdown
Contributor

@PavelMakarchuk, Max has said yes to merging this post today, with the costing section as it is, once you OK it.

If you're happy, reply here with "OK to merge". I'll then approve and squash-merge at the head you OK. If you'd rather change something first, push it and say so; I'll recheck and merge that head instead.

The final dashboard regeneration hasn't been published yet. When it is, I'll check the post's figures against it, and fix anything that moves in a follow-up PR.

🤖 Generated with Claude Code

@PavelMakarchuk

PavelMakarchuk commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor Author

OK to merge at 0ddbe9b, given Max's yes.

@MaxGhenis MaxGhenis left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving at 0ddbe9b on Max's yes (relayed by the coordinator: "Yes, once Pavel OKs") and Pavel's OK (6476100182). Checked: every microsimulation figure in the post against the dashboard's final fuel duty receipt (test link revision 28, artifact e077f8d4, built at #290's freeze head 4de166f0; no displayed figure differs), whole-pound rounding, the household examples on the October scenario, and CI (all checks pass at this head). The post is unchanged since be1b1cf; 0ddbe9b only merges main.

🤖 Generated with Claude Code

@MaxGhenis
MaxGhenis merged commit be2d617 into main Oct 28, 2026
10 checks passed
MaxGhenis added a commit to PolicyEngine/uk-autumn-budget-dashboard-2026 that referenced this pull request Oct 28, 2026
PolicyEngine's post "The fuel duty cut extension in the Autumn Budget
2026" is live (PolicyEngine/policyengine-app-v2#1459), so its card links
it as "Our explainer".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 28, 2026
* Draft Autumn Budget 2026 savings/property and trading explainers

* Add provisional dashboard population results to draft explainers

* Clarify income bands and prepare draft review handoff

* Add a line chart type for blog posts, and valueLabels for bar charts

BlogLineChart.tsx draws series against a numeric x axis, with step
series, markers labelled in a strip above the plot, an x axis format, a
y axis fitted to the data on request, and a y axis width that follows
the tick labels. blogChartUtils gains a thousands separator, a niceTicks
option that leaves zero out, and validFormat. Bar charts take
"valueLabels": false when several series make the labels overlap.
chart-standards.md documents both. Used by the Budget 2026 posts
(#1457, #1459).

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

* Keep savings/property post and shared analysis in base draft

* Keep line chart axis labels, axis title and legend apart

The first x tick label no longer touches the lowest y tick label at the
plot's corner, and the legend sits clear of the x axis title. Checked on
every chart in the PTA post at 1280 and 375 pixels wide.

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

* Pin Budget paragraph citations and record latest review decisions

* Round savings/property worked table to whole pounds

* Flag pending replacement of regenerated national results

* Align budget explainers with PTA forecast and chart methodology

* Add illustrated savings and property cover

* Clarify cover image provenance

* Split property income tax explainer from savings draft

* Clarify property sources and shared household methodology

* docs: clarify budget household generator scope

* docs: add property microsimulation to Budget explainer

* docs: address property microsimulation review feedback

Clarify the timing comparison and landlord residence. Remove internal review notes and uncleared reach, poverty and inequality outputs while retaining verified national revenue and decile results.

* docs: remove withdrawn microsimulation previews

Drop the old combined savings/property and trading preview aggregates, their verifier and public references. Keep the approved property-only revenue and decile microsimulation unchanged.

* docs: remove internal review-status wording

* docs: compare property estimate with the OBR's income tax line

Max's rule (28 Oct): cite primary sources. Compare PolicyEngine with the
income tax line of measure 61 in the OBR's detailed policy table (Table
1.1, policy.xlsx sha256 cdcc2a06): 0, 0, 539, 394, 403, 412 £m. Table
6.1's total (the lines rounded to the nearest £5m) stays as context, and
the other lines are named by the table's own labels. From 2029-30 the
estimate is 9%, 10% and 11% above that line (unrounded figures).

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

* docs: say the OBR income tax line is the closest comparison, not the same scope

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

* docs: broaden property explainer key figures heading

* docs: say 'exceeds' rather than 'is above' (style)

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

* docs: dashboard line covers the Budget measures we model

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

---------

Co-authored-by: PavelMakarchuk <pavel.ma99@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Max Ghenis <mghenis@gmail.com>
MaxGhenis added a commit that referenced this pull request Oct 28, 2026
* Draft Autumn Budget 2026 savings/property and trading explainers

* Add provisional dashboard population results to draft explainers

* Clarify income bands and prepare draft review handoff

* Add a line chart type for blog posts, and valueLabels for bar charts

BlogLineChart.tsx draws series against a numeric x axis, with step
series, markers labelled in a strip above the plot, an x axis format, a
y axis fitted to the data on request, and a y axis width that follows
the tick labels. blogChartUtils gains a thousands separator, a niceTicks
option that leaves zero out, and validFormat. Bar charts take
"valueLabels": false when several series make the labels overlap.
chart-standards.md documents both. Used by the Budget 2026 posts
(#1457, #1459).

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

* Keep savings/property post and shared analysis in base draft

* Keep line chart axis labels, axis title and legend apart

The first x tick label no longer touches the lowest y tick label at the
plot's corner, and the legend sits clear of the x axis title. Checked on
every chart in the PTA post at 1280 and 375 pixels wide.

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

* Add standalone trading allowance explainer with UC and sole-trader cases

* Pin Budget paragraph citations and record latest review decisions

* Use agreed UC example and cite the Budget trading paragraph

* Round savings/property worked table to whole pounds

* Round sole-trader worked table to whole pounds

* Flag pending replacement of regenerated national results

* Mark national snapshot as awaiting reconciled replacement

* Align budget explainers with PTA forecast and chart methodology

* Match trading explainer to PTA structure and line charts

* Trading allowance post: cut the model's national figures until the final run

The national figures came from preview run 230c4665427e0bb1, which the
final regeneration replaces, so they are cut (MERGE.md gate 2). The
Treasury costing keeps Table 6.1 row 15 and the timing explanation, and
links the dashboard for PolicyEngine's estimate, whose 2027-28 figure is
marked not comparable (Self Assessment timing, mapping.csv).

Also drops the draft review note and the sentence about a proposed
dashboard example the dashboard does not have, links the dashboard's
canonical URL and the analysis folder on main, and names the lone parent
in the £1,500 limitation case.

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

* Trading allowance post: name PolicyEngine's estimates where the cut left them implicit

After the national figures were cut, say whose estimates the coverage
limits describe, drop the claim that the dashboard already shows the
cost, describe Table 6.1's 2027-28 entry as no receipts effect, and
name the baseline and reform in the methodology.

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

* Clarify trading allowance exclusions and dashboard introduction

* Format merged blog metadata

* Add illustrated trading allowance cover

* Add illustrated savings and property cover

* Clarify cover image provenance

* Split property income tax explainer from savings draft

* Clarify property sources and shared household methodology

* docs: clarify budget household generator scope

* Trading allowance post: remove the unused SVG cover

posts.json uses uk-autumn-budget-2026-trading-allowance/cover.webp, and
nothing in the repository references the SVG. #1460 removed its unused
SVG the same way.

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

* docs: add property microsimulation to Budget explainer

* docs: address property microsimulation review feedback

Clarify the timing comparison and landlord residence. Remove internal review notes and uncleared reach, poverty and inequality outputs while retaining verified national revenue and decile results.

* docs: remove withdrawn microsimulation previews

Drop the old combined savings/property and trading preview aggregates, their verifier and public references. Keep the approved property-only revenue and decile microsimulation unchanged.

* docs: remove internal review-status wording

* docs: compare property estimate with the OBR's income tax line

Max's rule (28 Oct): cite primary sources. Compare PolicyEngine with the
income tax line of measure 61 in the OBR's detailed policy table (Table
1.1, policy.xlsx sha256 cdcc2a06): 0, 0, 539, 394, 403, 412 £m. Table
6.1's total (the lines rounded to the nearest £5m) stays as context, and
the other lines are named by the table's own labels. From 2029-30 the
estimate is 9%, 10% and 11% above that line (unrounded figures).

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

* docs: cite the OBR's policy breakdown for the trading costing

Compare with the government's costing, certified by the OBR, on the
Income tax and NICs lines of the OBR's Table 1.1 (measure 15), which
match the taxes the post's examples cover: 221, 165, 171 and 178 £m from
2028-29. Table 6.1's rounded total stays as context, with the other
lines named by the table's own labels (about £2m a year).

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

* docs: say the OBR income tax line is the closest comparison, not the same scope

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

* docs: define NICs and quote Table 1.1's line labels in the trading costing

Review fixes: the 93% income tax share holds from 2028-29 (the line is
zero before), NICs is spelled out at first use, the other lines carry the
table's own labels in quotes, and the policy costings are noted as showing
Table 6.1's rounded figures.

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

* docs: broaden property explainer key figures heading

* docs: point to the dashboard for the Budget measures we model

Production doesn't show the trading allowance until the dashboard's
next deploy, so the line no longer says the dashboard has "this" measure;
same wording as the property post's fix.

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

---------

Co-authored-by: PavelMakarchuk <pavel.ma99@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Max Ghenis <mghenis@gmail.com>

This branch was successfully deployed

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

2 participants