Skip to content

Briefing: say what the 670,000 Pension Tax Allowance count counts - #1487

Merged
MaxGhenis merged 1 commit into
mainfrom
fix/briefing-pta-income-tax-count
Oct 29, 2026
Merged

MaxGhenis merged 1 commit into
mainfrom
fix/briefing-pta-income-tax-count

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Hold: don't merge. This changes public text on the live briefing (#1469). It waits for the Budget coordinator or Max to say go.

The change

One sentence in the briefing's Pension Tax Allowance comparison (L200), from Pavel's live review, part 5, item 3:

  • Was: "We estimate that about 670,000 people gain in 2027-28, against the Treasury's 500,000."
  • Now: "We estimate that about 670,000 people above State Pension age pay less income tax in 2027-28, against the Treasury's 500,000."

The figure doesn't change. Only the words that say what it counts change.

Why

  • The 670,000 is people_directly_affected in the Pension Tax Allowance artifact: public/data/artifacts/state_pension_income_tax_protection/1bfeed3c27a3c9b9/age_impact.csv, 2027, all row, 665,907.
    • calculators.py counts a person when their own income tax, National Insurance, student loan repayment or employment income changes by £1 a year or more (DIRECT_EFFECT_VARIABLES, DIRECT_EFFECT_MIN_GBP).
    • The measure's modifier (budget_measures/pension_tax_allowance.py) replaces only income_tax and Universal Credit's two income-tax-on-earnings slices. It sets the reduction to zero unless is_SP_age, and it can only lower income tax (max(0, current - used)).
    • In a local policyengine-uk checkout (not pinned to 2.151.0), none of the other three variables reads income_tax directly: NI adds its contribution components, student loan repayment reads adjusted_net_income, and employment income sums its components.
    • Pavel's review and the Pension Tax Allowance post read the count the same way: people at State Pension age whose income tax falls. The 65+ row holds all 665,907.
  • Everywhere else, the post's "gain" means people who live in households that gain (Table 5 and the measure paragraphs). On that measure about 990,000 people gain in 2027-28: the same all row's pct_better_off, 1.41%, of its people, 69.99 million. metrics.csv gives the same 1.41% as people_affected.
  • The Treasury's 500,000 counts pensioners who pay less income tax, in HM Treasury's explainer as the Pension Tax Allowance post quotes it (L757). That post also says both counts cover "people over State Pension age whose income tax falls". The new wording compares like with like. Pavel's review (part 5, item 3) proposed the change.

Not changed

Checks

  • git diff touches one line of uk-autumn-budget-2026-briefing.md.
  • Independent review: GPT-6.1 Sol. The result goes in a comment below.

🤖 Generated with Claude Code

The 670,000 is the dashboard's people_directly_affected for 2027-28:
people whose own income tax falls by £1 a year or more, all aged 65 or
over. "People gain" read as the post's own gain measure, people in
households that gain, which is about 990,000 (1.41% of 70.0 million).
The new wording matches the Treasury's "pay less income tax" and the
Pension Tax Allowance post.

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

Request Review

@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Independent review: GPT-6.1 Sol, two rounds, at head 0a21ff4.

  • r1 (20261029-031349-briefing-pavel-live-r1): REQUEST CHANGES. It questioned whether "above State Pension age" holds, and it found that this body cited a column in the wrong file. It found no other error in the post among Pavel's points.
  • r2 (20261029-032127-briefing-pavel-live-r2): APPROVE WITH CHANGES. With the modifier's code in front of it (budget_measures/pension_tax_allowance.py gates the reduction on is_SP_age and changes only income tax), it withdrew the age finding and kept the sentence as it stands. Its two wording points, on the dependency evidence and on attribution, are now in the body above.

Sol checked:

  • the article hash;
  • that the diff changes one sentence;
  • the 665,907 direct count and the roughly 988,000 people in gaining households;
  • sentence case and the "exceeds" rule.

CI: 10 of 10 checks pass, and GitHub reports the PR MERGEABLE. Still held: this waits for the Budget coordinator's or Max's go.

🤖 Generated with Claude Code

@MaxGhenis
MaxGhenis merged commit ac69fd8 into main Oct 29, 2026
10 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Merged at 0a21ff4 with --admin --match-head-commit on Max's go (d2170, 29 Oct ~14:25Z, via the Budget coordinator). The only block was the required review, which no one can give on Max's own PR. Gates: gh pr checks exit 0 (10/10); MERGEABLE; no CHANGES_REQUESTED; GPT-6.1 Sol r2 approved the one changed sentence as it stands (its two points were on this PR body, now in it); the coordinator read the diff (one sentence, 670,000 unchanged, now counts people above State Pension age who pay less income tax).

🤖 Generated with Claude Code

@MaxGhenis
MaxGhenis deleted the fix/briefing-pta-income-tax-count branch October 29, 2026 14:24

This branch was successfully deployed

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