Skip to content

Budget 2026 posts: cut process wording, recast work-in-progress notes as limitations - #1492

Merged
MaxGhenis merged 3 commits into
mainfrom
copy/budget-posts-process-wording
Oct 29, 2026
Merged

MaxGhenis merged 3 commits into
mainfrom
copy/budget-posts-process-wording

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Max's rule (29 October): public copy says what the reader gets and what we found, never how or why we made it. That rules out production choices, checks and reviews, reruns, "we built" and work-in-progress plans. Method that changes how a number reads stays: assumptions, data year, what a count counts, scope limits and comparisons with official figures.

This PR applies the rule to the seven live Budget posts, following the coordinator's classification of a Sol sweep (~/reviews/budget-coordinator/process-leak-sweep/CLASSIFIED.md and findings.md). It changes wording only: every link and every figure stays. The only numbers that leave the text are £6,000, in the cut sentence "We checked the £6,000 property-only example separately" (the example itself stays), and the years 2026 and 2030 in the triple lock post's cut rebuild sentences.

Cut or replaced: process (section A)

Post Was Now
Briefing, methodology "…(manifest revision 17), and we read each from files that match the checksums in their receipt; the exceptions are the further figures…, which come from further runs of our model." "…(manifest revision 17), except the further figures…, which the published results don't include."
Trading allowance, methodology "…choose the larger deduction and check tax and benefit changes against independent arithmetic." "…and choose the larger deduction."
Property, methodology "We checked the £6,000 property-only example separately." and "Independent arithmetic checks the tax calculations." cut
Triple lock, methodology "…on 160 paths sampled to represent the 50,000, with one further run to check a path on which both rules pay identical rates." "…on 160 paths sampled to represent the 50,000."
Fuel duty, methodology "The net income table and the marginal rates run on the OBR October 2026 forecast: we build each household as a PolicyEngine UK simulation with the dashboard's forecast scenario, applied before data load, and add the measure to the same scenario." and, two sentences on, "In those simulations, the VAT step…" "With and without the measure, the net income table and the marginal rates use the dashboard's OBR October 2026 forecast." and "In the net income table and the marginal rates, the VAT step…"
Fuel duty, methodology "…every 100 litres; we compute each point from the rules and check it against PolicyEngine UK." "…every 100 litres."
Fuel duty, methodology "…certified UK household data. We reproduced them in a separate run with the same package, data and forecast: the cost is…" "…certified UK household data: the cost is…"
PTA, methodology "PolicyEngine UK does not yet include the PTA, so we added it as a structural reform that reduces…" and "the PTA modifier in the draft update to PolicyEngine's Autumn Budget 2026 dashboard" "PolicyEngine UK 2.151.0 doesn't include the PTA; in these calculations the PTA reduces…" and "the PTA modifier in PolicyEngine's Autumn Budget 2026 dashboard"
Carer's Allowance, methodology "PolicyEngine UK does not yet include the taper, so we added it as a structural reform that changes…" and "the Carer's Allowance taper in the draft update to PolicyEngine's" "PolicyEngine UK 2.151.0 doesn't include the taper; in these calculations the taper changes…" and "the Carer's Allowance taper in PolicyEngine's"

"Draft update" to "dashboard". That draft has since merged. On dashboard main (1eca3182), pension_tax_allowance.py has the £94 allowance, the 1-in-3 taper (taper_divisor=3) and the Universal Credit slices (uc_income_tax_on_earnings, uc_income_tax_on_trade). carers_allowance_earnings_taper.py changes carers_allowance_pre_overlap with a 100% taper, keeps the engine's £204 limit and applies half a year in 2030-31. Both posts already describe the dashboard in the present tense elsewhere (PTA L994; Carer's Allowance L748).

Recast as present-tense limitations: work in progress (section B)

Post Was Now
Briefing L32 "We give the official costing below; our own estimate follows with a data update." "We give the official costing below but no national estimate of our own."
Briefing L58 "We leave out the savings income rate rise until our estimate is ready." "The package leaves out the savings income rate rise."
Briefing L195 "The notes explain the comparisons and also draw on further runs of our model, so some of their figures aren't in Table 6 or in our published results:" "The notes explain the comparisons, and some of their figures appear in neither Table 6 nor our published results:"
Briefing L218 "We hold our estimate back from this release while we update the savings income in our data; it follows with that update." "Our national estimates leave out the rate rise."
Briefing, "What we're improving" "We plan to update these results later this week. The update will: add…, correct…, extend…" and "We are also working on: …" "Limitations", in one list: "These results: leave out poverty figures and the dashboard's separate people-affected figures; leave out…; apply the trading allowance to trading income but not to miscellaneous income (including it would raise our estimate of the allowance's cost); don't correctly reflect…; apply the fuel duty cut to petrol and diesel but not to road fuel gases…; don't give the Pension Tax Allowance to everyone who reaches State Pension age during the tax year; project household electricity spending with general inflation rather than retail energy prices." Then: "PolicyEngine UK 2.151.0, our open-source model, doesn't include the Budget's measures; the dashboard runs them."
Carer's Allowance L748 "We will update the 2030-31 population estimates after correcting how the taper interacts with overlapping benefits, such as the State Pension." "The 2030-31 population estimates don't correctly reflect how the taper interacts with overlapping benefits, such as the State Pension."
Triple lock L1 "…as typical or likely, and we are updating our dashboard to match." "…as typical or likely."
Triple lock L3 "We are rebuilding the dashboard with PolicyEngine UK 2.151.0, the Microcosm UK dataset, and the OBR's October 2026 forecast to 2030 with its March 2026 long-term assumptions after that, and its figures may change." "The figures below could differ on PolicyEngine UK 2.151.0, the Microcosm UK dataset and the OBR's October 2026 forecast to 2030, with its March 2026 long-term assumptions after that."
Triple lock L126 "Our rebuild uses the October forecast to 2030 and, until the OBR publishes long-term assumptions to match it, the March 2026 ones after that." cut
Triple lock L235 "The dashboard's next release, rebuilt on the Budget's inputs, reports scenarios only." cut
Triple lock footnote "Until its next release, our dashboard calls the policy by its earlier name, the Burnham plan." "Our dashboard's pre-Budget release calls the policy by its earlier name, the Burnham plan." (the same kind of note; the sweep didn't list it)
Property L13 "The Budget also raises savings income tax rates; we will cover that measure separately." "The Budget also raises savings income tax rates, which this post doesn't cover." (a promise; the sweep didn't list it)
Property L79 "We have not yet explained the later-year gap; …" "Our analysis doesn't explain the later-year gap; …" (work in progress; the sweep didn't list it)

The "updating our dashboard to match" clause goes without a replacement because the update has landed: PolicyEngine/uk-triple-lock#48 (merged 28 October, 23:04Z) took the expected saving and the "typical" path names off the dashboard.

Kept, shortened: why we withdrew the triple lock figure (section C)

  • L1 keeps "failed a test we had registered before the Budget" and its link.
  • L233: "we built a statistical model of prices and earnings and simulated 50,000 paths" becomes "we drew 50,000 paths from a statistical model of prices and earnings". "with a rule: if the model failed, we would report scenarios only" folds into one clause: "and committed, if the model failed, to reporting scenarios only".
  • L250 keeps the model, the evaluation window and the measured bias.

Not changed

  • No posts.json description repeats a cut line, so none changes. The briefing description's "as property income tax rates rise" stays for d2159.
  • Briefing L200 (the 670,000 sentence) belongs to Briefing: say what the 670,000 Pension Tax Allowance count counts #1487 (held, d2170). This PR doesn't touch that line, so the two merge in either order.
  • These lines are like the ones above but sit outside the classified list, so this PR leaves them. Max can take them in a follow-up:
    • trading allowance: "Its interpolation agrees with PolicyEngine UK to within one penny…", "dashboard commit 64042657", "validation";
    • PTA: "These values agree with PolicyEngine UK to the penny…";
    • Carer's Allowance: "does not yet count the PAYE…";
    • briefing intro: "which measures we don't yet model".
  • The briefing's limitations name the people-affected figures as "the dashboard's separate people-affected figures", which keeps Max's term and avoids a clash with Table 5's gain and lose shares. They're the dashboard's people-affected outputs, which stayed out pending disclosure checks.

Reviews

  • Sol r1 (20261029-080903, at 682b81f): APPROVE WITH CHANGES. It asked to restore the October-forecast detail in triple lock L3 and to clear up "scenarios only if it failed".
  • In-session Opus review (at 682b81f), run while the Codex lanes were held: APPROVE WITH CHANGES. It asked to pin the "doesn't include" claims to 2.151.0 (policyengine-uk#2719 and uk-triple-lock#49 are open), keep the footnote true to the pre-Budget release, and clarify the trading bullet, the fuel duty VAT sentence and the L233 wording. It also flagged the property L13 promise.
  • 7a785aa makes every change both reviews asked for except the people-affected wording.
  • Sol r2 (20261029-082129, at 7a785aa): APPROVE WITH CHANGES. It asked to name the people-affected figures as the dashboard's separate ones, to replace the ambiguous "it" in the PTA and Carer's Allowance methodology, and to fix property L79. 056c0b1 makes all three changes.

Checks

  • Every link in the seven files stays: a script compared the old and new link lists.
  • No figure changes. The numbers that leave the text are the ones named in the summary.
  • The added lines contain no "is/are above" and no new passive. "Were published" in triple lock L3 predates this PR.

🤖 Generated with Claude Code

… as limitations

Max's rule (29 Oct): public copy says what the reader gets and what we
found, not how or why we made it. Across the seven live Budget posts this
cuts checks, reruns and build steps, recasts plans as present-tense
limitations, and keeps the method that changes how a number reads. No
figure, link or claim changes.

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 12:29pm UTC
policyengine-website Ready Ready Preview Oct 29, 2026 12:29pm UTC

Request Review

Pin "PolicyEngine UK doesn't include" claims to 2.151.0 and keep them in
the PTA and Carer's Allowance methodology; keep the triple lock footnote
true to the pre-Budget release; restore the October-forecast detail in
the triple lock note; clarify the scenarios-only commitment, the trading
allowance bullet and the fuel duty VAT sentence; recast the property
post's promise to cover savings separately. No figure or link changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Name the people-affected figures the briefing leaves out as the
dashboard's separate ones; say "the PTA" and "the taper" where "it" was
ambiguous; recast the property post's "We have not yet explained" as a
present-tense limitation. No figure or link changes.

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

Copy link
Copy Markdown
Contributor Author

Merge record for #1492. I admin-merged this at head 056c0b1b7d812d536523d3f67de73182aea96c49 with --match-head-commit. It was squash-merged as 603577b578ab3f8929d1ef80bf5fbf8d9f386d3a at 13:05:28Z on 29 October.

  • Go. Max said "Yes, merge on green (Recommended)" for the process-wording cuts and recasts (29 October, about 11:5xZ), and the Autumn Budget coordinator session relayed it. The coordinator lifted its no---admin line for this PR only and OKed each head before merging.
  • 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 manual checks (Vahid's 28 October rule). It read each head before giving its OK:
    • 682b81f: all seven files. Every figure, link and citation stays.
    • 7a785aa: the compare from 682b81f, 11 edits, all wording only.
    • 056c0b1: the compare from 7a785aa, 4 lines, all wording only.
  • Independent reviews. Paths are under ~/reviews/budget-coordinator/process-wording-pr/.
    • Sol r1 (subfleet 20261029-080903-pr1492-process-wording-r1, at 682b81f): APPROVE WITH CHANGES, 2 findings. out-sol-r1.md.
    • Opus, in session (at 682b81f), run while the Codex lanes were held: APPROVE WITH CHANGES, 7 findings. out-opus-r1.md.
    • Sol r2 (20261029-082129-pr1492-process-wording-r2, at 7a785aa): APPROVE WITH CHANGES, 3 findings. out-sol-r2.md.
    • Sol r3 (20261029-082806-pr1492-process-wording-r3, at 056c0b1): APPROVE, no findings. Sol confirmed that all 125 link targets, 316 table lines and 20 chart blocks stay unchanged. out-sol-r3.md.
  • CI at 056c0b1. gh pr checks exited 0, with all 10 checks green: Build, Tests, Lint and format, Type checking, Visual regression tests, Check embedded site URLs, Storybook Publish, Vercel Preview Comments, and both Vercel deployments.
  • Scope. Seven live posts, wording only: no link or figure changes. Briefing: say what the 670,000 Pension Tax Allowance count counts #1487 (d2170) and Scroll wide research-post tables inside their own container #1472 (d2158) stay untouched.

@MaxGhenis
MaxGhenis deleted the copy/budget-posts-process-wording branch October 29, 2026 13:07

This branch was successfully deployed

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