Skip to content

Match the Budget Lab's 9 Oct 2026 revision: rerun scenarios, regenerate site, memo and paper - #45

Open
MaxGhenis wants to merge 8 commits into
mainfrom
yale-oct-2026-revision
Open

MaxGhenis wants to merge 8 commits into
mainfrom
yale-oct-2026-revision

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

The Budget Lab revised Iselin and Nunn, "How potential AI futures would play out in the current tax system", on 9 October 2026 (AI-Fiscal v1.0.1). Our replication pinned the July Table 1, so it no longer matched. This PR moves it to the revised paper, reruns every scenario on the published runtime, and regenerates the site, memo and paper.

What the Budget Lab changed

From the revised report's erratum and AI-Fiscal's v1.0.1 changelog:

  1. 2030 labor shares. Both inputs now come from the Economists column of Karger et al. (2026): Table 19 for GDP growth, Table 39 for labor shares. In July the labor shares came from the pooled Total column. Moderate 53.8% → 54.0%, Rapid 51.3% → 52.0%; Slow is 55.0% in both. In their Table 1, capital growth goes Moderate 7.54% → 7.08% and Rapid 17.28% → 15.60%; labor growth Moderate 0.41% → 0.78% and Rapid −0.94% → +0.41%. GDP growth and λ are unchanged.
  2. CBO FY2030 ratios. The CIT/GDP ratio moves from the rounded 1.3% to 1.2766%, so their corporate anchor goes from $486.1B to $477.3B and their macro CIT wedge falls 1.8% in every cell. Total revenue is now $6,595.1B (was $6,618.2B). This changes their side of our bridge only; our microsimulation does not use it.

Their headline, Rapid / expansive with the corporate wedge, goes from $216.0B (3.3%) to $246.3B (3.7%). The July wording ("roughly twice as large", "$216 billion, a 3.3 percent increase", labor shares "55.0%, 53.8%, or 51.3%", ATR "21% … to 34%") is confirmed against the Wayback Machine's 21 July 2026 copy of the report.

Why ours moved

Only through (1). Same runtime, same data: policyengine.py 5.0.1, policyengine-us 1.764.6, build p, Head Start excluded, runtime fingerprint dc91de12d0ddbc57. The 2030 baseline row is byte-identical to the July-inputs run.

One more input change, of no practical size. The CBO growth factor is now (1.022)(1.018)^4 = 1.0975947, the path the report states and AI-Fiscal commits, in place of a four-decimal 1.0976 recovered from the July table. With 1.0976 the revised Rapid capital growth is 15.5949%, which rounds to 15.59% rather than the published 15.60%. With the exact factor and θ0_L = 0.555, our g_Y, g_K, g_L and λ match AI-Fiscal's committed per-cell parameters to 1e-16 in both releases. Slow and the shares-fixed counterfactuals, which the labor-share change does not touch, move by at most $0.04B.

Before (July inputs) → after (revised inputs), 2030

Cell Labor share Revenue $B Payroll $B SPM poverty Δ pp Net Gini Δ
Slow / shares fixed fixed +47.2 → +47.3 +10.1 → +10.1 -0.14 → -0.14 +0.0002 → +0.0002
Slow / compressive 55.0% → 55.0% +3.3 → +3.3 -1.1 → -1.1 -0.12 → -0.12 -0.0003 → -0.0003
Slow / proportional 55.0% → 55.0% +6.5 → +6.5 -5.4 → -5.4 +0.04 → +0.04 +0.0007 → +0.0007
Slow / expansive 55.0% → 55.0% +9.8 → +9.9 -9.7 → -9.7 +0.20 → +0.20 +0.0018 → +0.0018
Moderate / shares fixed fixed +286.8 → +286.8 +61.1 → +61.1 -0.67 → -0.67 +0.0013 → +0.0013
Moderate / compressive 53.8% → 54.0% +124.5 → +141.2 +33.0 → +39.5 -0.95 → -1.02 -0.0031 → -0.0034
Moderate / proportional 53.8% → 54.0% +143.9 → +160.7 +7.0 → +13.4 -0.13 → -0.24 +0.0031 → +0.0029
Moderate / expansive 53.8% → 54.0% +164.7 → +181.5 -19.7 → -13.5 +0.71 → +0.64 +0.0094 → +0.0092
Rapid / shares fixed fixed +575.8 → +575.8 +121.5 → +121.5 -1.09 → -1.09 +0.0025 → +0.0025
Rapid / compressive 51.3% → 52.0% +172.9 → +233.0 +33.9 → +58.0 -1.54 → -1.64 -0.0048 → -0.0057
Rapid / proportional 51.3% → 52.0% +211.4 → +271.8 -16.2 → +7.0 +0.11 → -0.17 +0.0073 → +0.0064
Rapid / expansive 51.3% → 52.0% +252.1 → +313.4 -69.5 → -47.3 +1.72 → +1.59 +0.0198 → +0.0190
realization: Rapid / proportional / realization 0% 51.3% → 52.0% -60.5 → +26.4 -16.2 → +7.0 +0.14 → -0.10 +0.0001 → -0.0000
realization: Rapid / proportional / realization 25% 51.3% → 52.0% +6.7 → +86.9 -16.2 → +7.0 +0.13 → -0.12 +0.0019 → +0.0016
realization: Rapid / proportional / realization 50% 51.3% → 52.0% +74.2 → +147.7 -16.2 → +7.0 +0.11 → -0.13 +0.0037 → +0.0032
realization: Rapid / proportional / realization 75% 51.3% → 52.0% +141.8 → +209.4 -16.2 → +7.0 +0.13 → -0.13 +0.0055 → +0.0048
realization: Rapid / proportional 51.3% → 52.0% +211.4 → +271.8 -16.2 → +7.0 +0.11 → -0.17 +0.0073 → +0.0064
capital_scope_excluding_retirement: Slow / proportional 55.0% → 55.0% -3.9 → -3.9 -5.4 → -5.4 +0.05 → +0.05 +0.0006 → +0.0006
capital_scope_excluding_retirement: Moderate / proportional 53.8% → 54.0% +98.3 → +118.0 +7.0 → +13.4 -0.11 → -0.21 +0.0026 → +0.0024
capital_scope_excluding_retirement: Rapid / proportional 51.3% → 52.0% +105.9 → +176.7 -16.2 → +7.0 +0.15 → -0.12 +0.0061 → +0.0054

Findings that changed

Rapid aggregate labor income now grows 0.41% instead of falling 0.94%:

  • Poverty under the tilt. Rapid / proportional poverty now falls 0.17 pp. On the July inputs it rose 0.11 pp. The tilt erodes most of growth's poverty gain (−1.09 pp with shares fixed) instead of reversing it.
  • Realization. Revenue stays positive at every realized share: +$26B at 0%, where the July inputs gave −$60B and a breakeven at 22.5%.
  • Retirement in the capital set. Excluding it cuts the Rapid estimate by about a third ($272B → $177B), not half.
  • Tax-base choices vs scenario range. The two tax-base choices span $245B of the Rapid estimate, nearly the $265B between Slow and Rapid. On the July inputs they spanned more.
  • Bridge. The bridged headline is +$344B against their +$246B (1.39×; was +$301B vs +$216B).
  • Payroll. It agrees to within $5.1B in the nine as-forecast cells (Rapid: ours +58/+7/−47 against theirs +54/+5/−48 for compressive/proportional/expansive). That is agreement on the cap-and-spread channel. With shares fixed, where labor income grows with output, ours is 1.4× theirs (+$121B against +$84B in Rapid); the paper and memo now say so.
  • Average-tax-rate cross-check, now like for like. Their Rapid band (21–32%) is federal revenue with their wedge over the $767B of gross factor income their shock adds: 21/26/32% by variant. On the same numerator, our cells run 30/34/39% of the market income ours adds, higher in every cell as the bridge is. The old text set our household-basis 30.7% against the band of their variants.
  • Tilt vs growth. The intro said the tilt, not the growth rate, "drives" the results. Whether it outweighs growth now depends on the decomposition order. The finding now states what holds either way: the tilt takes back much of what growth delivers (47% of Rapid's revenue gain kept), and more of the poverty gain (16% kept).

The paper and memo carry a dated revision note, and every sentence these results falsified is rewritten. The /income-shift panel has a revision notice linking to the memo. "The great majority of workers" below the Rapid / expansive crossover ($139,212) still holds: in the build-p input microdata, 85–92% of workers earn below it for any wage growth to 2030 up to 40%.

How it is checked

  • test_ai_scenarios.py
    • Both vintages of the published Table 1, to 0.005 pp.
    • A differential test against AI-Fiscal's committed cell_params for all 18 cells in both releases, to 1e-12.
    • Hypothesis property tests: the factor accounting identity θ0_K·g_K + θ0_L·g_L = g_Y, post-shock shares, monotonicity in the target share, fixed shares and λ symmetry.
  • test_scenario_vintages.py
    • Same runtime, data and accounting; identical baseline.
    • Every row carries exactly the scenario the module builds today.
    • Untouched cells move by less than $0.1B; every reallocated Moderate and Rapid cell moves by more than $1B.
  • test_paper_claims.py: each qualitative sentence in the paper is checked against the generated values ("erodes most", "nearly doubles", "about a third", "positive at every realized share", ...), plus the one paper value the site restates.
  • test_memo_tables.py: every memo table and every quoted memo figure are checked against the run and the paper macros, and memoContent.js must be generated from the memo.
  • test_generated_files_in_sync.py: the site payload, the state exposure deltas, and the paper's values and tables must regenerate exactly from the run. Both Budget Lab workbooks are pinned to AI-Fiscal's git blobs (b4cdf12c v1.0.1, 3090e94d tag v1.0.0). CI now installs openpyxl, so the regeneration check runs there.
  • test_head_start_correction_outputs.py and the paper's September correction note now measure that correction on the July-inputs run (ai_scenarios_v1_0_0_inputs.json), so the revision cannot leak into it.
  • Checkpoint keys now carry a digest of the scenario and shock settings (year, capital and labor sets, pass-through share), and the baseline is keyed the same way. Before, a resumed run would have reused the July Moderate and Rapid cells, because the revision changed no label.
  • pytest analysis/tests: 259 passed on the 5.0.1 engine environment; 258 passed and 1 skipped (needs policyengine_us) in the CI environment. vitest: 41 passed. eslint --max-warnings=0: clean. The paper PDF builds with no undefined references; the eight overfull boxes are the same ones as on main.

Invariants

  • Factor accounting: θ0_K·g_K + θ0_L·g_L = g_Y, and labor's post-shock share equals θ1_L, for all inputs (Hypothesis).
  • Monotonicity: a lower target labor share moves growth from labor to capital at fixed g_Y. Fixed shares give g_K = g_L = g_Y. λ_compressive + λ_expansive = 2.
  • Differential: g_Y, g_K, g_L and λ equal AI-Fiscal's R-code values for all 18 cells in both releases (1e-12).
  • Vintage: same runtime ⇒ identical baseline. Only the reallocated Moderate and Rapid rows change inputs.
  • Determinism: realization:1.0 equals grid Rapid / proportional exactly, though computed in separate processes.

Review

Three independent Opus reviewers (in session; Subfleet had no dispatchable lanes) covered replication and provenance, every claim and number, and what the PR missed. They found no blockers, and every number they recomputed matched. Their findings are applied in dc9b555. A fourth reviewer checked that delta: no blockers, and every recomputed figure correct (including the matched ATR, 21.05/26.17/32.11% theirs and 29.76/34.12/38.74% ours). Its three should-fix items, all about which comparison a sentence names, are applied in 7267996.

Run notes

One simulation of this pipeline peaks at about 80 GB of footprint, and a process does not release it all between units. The September run predates the fleet's memory caps. --max-new-units 1 now runs one unit per process, resuming from the input-keyed checkpoint, under heavy_run.sh with a 110 GB cap. The first process peaked near 81 GB and no later one passed 91 GB; the grid took about an hour.

Out of scope

  • ai-inequality-slides and ai-inequality-populace predate the July report and quote none of its numbers. policyengine-app-v2 does not reference these routes.
  • The mechanism sweep (shiftSweepData.json) is untouched by the revision and still predates the September Head Start correction, as the page says.

Files

  • analysis/outputs/ai_scenarios.json: the rerun. ai_scenarios_v1_0_0_inputs.json is the 26 September run, byte for byte.
  • analysis/outputs/yale_publishable_2030.xlsx: AI-Fiscal's v1.0.1 workbook, equal to run D of their results/erratum_v1.0.1. yale_publishable_2030_v1_0_0.xlsx is the July one.
  • src/data/aiScenariosData.json: byte-identical to ai_scenarios_website_payload() of the run. It now carries each scenario's survey inputs, which the panel reads instead of restating them.
  • src/data/stateExposureData.json: compute_state_exposure.build() on the run's checkpointed per-state baseline. Baselines are unchanged (Oklahoma differs by 3e-11 $B).
  • Paper values, tables, figures and PDF regenerated. src/data/memoContent.js comes from bun run build:memo.

axiom: n/a: replication-calibration and output refresh, no policy encoding

🤖 Generated with Claude Code

The Budget Lab revised "How potential AI futures would play out in the
current tax system" on 2026-10-09 (AI-Fiscal v1.0.1). Its erratum moves the
2030 labor shares to the Economists column of Karger et al. Table 39:
Moderate 53.8% -> 54.0%, Rapid 51.3% -> 52.0%. Slow is unchanged at 55.0%.

- SCENARIO_INPUTS takes the revised shares.
- CBO_CUMULATIVE_GROWTH_FACTOR is now (1.022)(1.018)^4, the path the report
  states and AI-Fiscal commits. The recovered 1.0976 reproduced the July
  Table 1 but puts revised Rapid capital growth at 15.5949%, which rounds to
  15.59% rather than the published 15.60%.
- BASELINE_LABOR_SHARE (0.555) is unchanged; its comment now cites the
  source AI-Fiscal's config gives for it.
- Tests pin both vintages of Table 1, and a differential test checks g_Y,
  g_K, g_L and lambda against AI-Fiscal's committed per-cell parameters
  (both releases, all 18 cells) to 1e-12. Property tests cover the factor
  accounting identity, the post-shock share, monotonicity in the target
  share, fixed shares and lambda symmetry.
- Checkpoint keys now carry a digest of the scenario inputs. Keyed by label
  alone, a resumed run would have returned the July Moderate and Rapid cells
  for the revised inputs, since the revision changed no label.

The scenario outputs and site payload are regenerated in a following commit.

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

vercel Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
ai-inequality Ready Ready Preview Oct 17, 2026 12:34am UTC

Request Review

- yale_publishable_2030.xlsx is now AI-Fiscal's v1.0.1 publishable
  workbook (fetched at 1c25162c9aae; equal cell for cell to run D of their
  results/erratum_v1.0.1 comparison). The bridge and the paper read the CBO
  2030 corporate anchor ($477.3B, was $486.1B) and total revenue from it
  instead of hard-coding them.
- ai_scenarios_v1_0_0_inputs.json is the 2026-09-26 corrected run on the
  July scenario inputs, byte for byte. The Head Start correction tests and
  the paper's correction note now measure that correction on it, so the
  input revision cannot leak into either.
- The site payload carries each scenario's survey inputs (annual GDP
  growth, target labor share), and the scenario panel reads them instead
  of restating them.
- Paper, method notes: revised labor shares, the CBO path and labor share
  as their sources state them, "nearly twice", revised reference date.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The paper's numbers are generated, but the words around them are not:
test_paper_claims.py states each sign, ordering and size claim the prose
makes ("flips sign", "always positive", "halves", "the first decade") and
checks it against values_generated.tex, plus the one paper value the site
panel restates. test_memo_tables.py checks every table in the hand-written
memo against ai_scenarios.json at the precision it prints, and that the
site's memoContent.js is generated from it. Both pass on the current
outputs; a rerun that falsifies a sentence or a cell now fails CI.

compare_scenario_vintages.py pairs the July-inputs run with the current
one and prints the before/after table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps the Budget Lab's v1.0.0 workbook as yale_publishable_2030_v1_0_0.xlsx
(the bridge's July side, byte for byte the file this repo committed in
July) and adds revision_values(): labor shares, growth rates, Rapid
revenue, keep-rate, poverty and the bridged headline on both vintages,
plus the largest move in the cells the labor-share revision does not touch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A single simulation of this pipeline reaches a memory footprint near the
host's ceiling (the baseline passed 80 GB), and a process does not hand it
all back between units, so the first cell after the baseline went past
110 GB. --max-new-units N computes at most N units not already in the
checkpoint and exits with status 3 if any remain; relaunching until the
status is 0 runs one simulation per process. Numbers are unaffected:
every unit is the same computation, resumed through the input-keyed
checkpoint.

Also: the paper's October revision note (every figure a generated macro),
and the states figure only annotates Washington when it is in the top ten.

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

analysis/outputs/ai_scenarios.json is the full grid (21 units) rerun on the
published runtime (policyengine.py 5.0.1, policyengine-us 1.764.6, build p,
runtime fingerprint dc91de12d0ddbc57) with the revised labor shares and the
stated CBO path, one unit per process. The baseline row is byte-identical
to the July-inputs run, every row carries exactly the scenario the module
builds today, and cells the labor-share revision does not touch (Slow, the
shares-fixed counterfactuals) move by at most $0.04B
(tests/test_scenario_vintages.py).

Rapid labor income now grows 0.41% instead of falling 0.94%. Headline moves
(2030, $B):
- Rapid / proportional net revenue +211 -> +272; poverty +0.11pp -> -0.17pp
- Rapid / compressive +173 -> +233; Rapid / expansive +252 -> +313
- Moderate / proportional +144 -> +161
- Bridged Rapid / expansive +301 -> +344, against theirs +216 -> +246
- Realization at 0%: -60 -> +26, so there is no longer a breakeven
- Excluding retirement distributions: Rapid +106 -> +177 (cut by a third)

Regenerated from it with the repo's own code: the site payload
(ai_scenarios_website_payload, byte-identical to a regeneration), state
exposure (compute_state_exposure.build on the run's checkpointed per-state
baseline), paper values, tables, figures and PDF, and the memo copy.

Prose that the new numbers falsify is rewritten: the tilt now erodes most of
growth's poverty gain rather than reversing it; revenue stays positive at
every realized share; excluding retirement cuts Rapid by about a third, not
half; the state take nearly doubles; the two tax-base choices span nearly,
not more than, the Slow-to-Rapid range; the Budget Lab's ATR band is 21-32%.
The paper and memo carry a dated revision note. test_paper_claims.py and
test_memo_tables.py hold each of those sentences and every memo table to the
outputs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Three independent reviews (replication and provenance; every claim and
number; what the PR missed) found no blockers and every figure correct.
This applies their findings.

Claims:
- The average-tax-rate cross-check is now like for like. Their Rapid band
  (21-32%) is federal revenue with their wedge over the gross factor income
  their shock adds ($767B). On that numerator our cells run 30/34/39%
  against their 21/26/32%: higher in every cell, as the bridge is. Before,
  our household 30.7% sat against the band of their variants.
- The tilt matters about as much as growth for revenue ($304B against
  $265B) and more for poverty; it no longer "drives" both.
- Realization alone sets the $245B span; the retirement-scope case lies
  inside it. The sign reversal is now under expansion, not compression.
- The conclusion's "agree closely ... mostly definitional" now says where
  the models agree and why they diverge.
- Memo: the CBO change alone lowers their wedge 1.8% (the Rapid wedge
  falls $84B to $74B); 55% of the state take is in five states; the seven
  zero states "collect nothing"; reconcile_budget_lab.py's role; and
  consistent triplet order.
- Site: the state-tax line names the selected variant (it said
  "proportional" whatever was selected); the crossover is measured against
  the current-law baseline, not the proportional case; the panel carries a
  revision notice linking to the write-up.
- "Roughly twice" in July is confirmed against the Wayback Machine's
  21 July 2026 copy of the report.

Code and provenance:
- The v1.0.0 workbook is cited to their tag v1.0.0 (git blob 3090e94),
  not 74de5986e5ff, whose copy differs in run date and two source notes.
- reconcile_budget_lab.py prints their committed capital base ($4.51T)
  instead of inferring $4.6T from their prose.
- Checkpoint digests now cover the year and the shock settings, the
  baseline is keyed the same way, and a resumed baseline takes this code's
  description. --max-new-units rejects values below 1.
- compare_data_builds.py defaults to the like-for-like pair and warns when
  scenario inputs or net-income accounting differ.
- report_ai_scenarios.py reads the repo's own output, not the main checkout.

Tests:
- test_generated_files_in_sync.py: the site payload, the state exposure
  deltas, and the paper's values and tables must regenerate exactly from
  the run; both Budget Lab workbooks are pinned to AI-Fiscal's git blobs.
  CI installs openpyxl so the emit check runs there.
- test_memo_tables.py pins every quoted memo figure to the paper macros.
- test_paper_claims.py covers the matched ATR, the tilt against growth,
  and the realization span.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis changed the title Match the Budget Lab's 9 Oct 2026 revision of the AI-futures paper Match the Budget Lab's 9 Oct 2026 revision: rerun scenarios, regenerate site, memo and paper Oct 17, 2026
A fourth independent review, of the review-fix delta, found no blockers and
three claims that named the wrong comparison:

- The memo's five-state share (55%) and its ten-state/median line are Rapid
  / proportional facts; they now say so, instead of reading as the
  expansive cell the paragraph had just cited.
- The intro's first finding compared the tilt at Rapid with growth as
  forecast, which already carries a tilt; measured at fixed shares, growth
  adds more. It now states what holds in either order: the tilt takes back
  much of what growth delivers (47% of the revenue gain kept), and more of
  the poverty gain (16% kept).
- Payroll agrees within $5.1B in the nine as-forecast cells, not "anywhere
  in the grid". With shares fixed, ours is 1.4 times theirs in Rapid
  (+$121B against +$84B), and the paper and memo now say so (new
  PayrollFixedRapid* macros, tested).

Nits: "consistent with" for the divergence's causes; the 84% names its
basis; the market-income denominator is the same in each variant; the
transfer-detail baseline keys carry the year; descriptive metadata is
refreshed on resume; their capital base must be a single value; the method
notes' relaunch loop propagates a failure, and say where the fingerprint
lives.

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

MaxGhenis commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Hand-off from #51, which fixes the site's method copy. #51 leaves the paper's wording to this PR, since this PR regenerates the paper and its PDF. Three spots on this PR's head (7267996) carry wording #51 corrects on the site:

  • paper/sections/methodology.tex:55 says the sweep distributes the freed labor income "to positive capital income in proportion to existing holdings". The sweep's shift (labor_capital_shift._apply_shift) scales every positive amount of the capital income flows by one common factor, so each person gains in proportion to the capital income they already receive, and losses don't change.
  • paper/sections/methodology.tex:124-125 (:115-116 on main) uses the same "in proportion to existing holdings" for the calibrated scenarios' capital shock; check it against the scenarios' own allocation code before rewording.
  • paper/sections/results.tex:166 (:164 on main) says "State-funded benefit responses" and that the state-benefit registry at the paper's model version (1.764.6) "covers state SSI supplements and child-care subsidies". At 1.764.6, household_state_benefits also lists other programs, such as New Jersey's property tax relief, California's CAPI, CARE and FERA, and Massachusetts's TAFDC. It leaves out Medicaid, CHIP and every other state's TANF.

Merge order: this PR rewrites the AIScenarios.jsx revenue paragraph and regenerates src/data/stateExposureData.json, and #51 changes both (in the data file, only its scope_note, which compute_state_exposure.py's SCOPE_NOTE writes). Whichever PR merges second should keep #51's copy.

Separately, at 1.764.6 household_benefits counts Massachusetts's TAFDC twice, once through tanf and once through household_state_benefits (a one-household run gives $19,072 for $9,536 of TAFDC). PolicyEngine/policyengine-us#9478 fixed it in policyengine-us 2.4.4, so the paper's net revenue totals carry Massachusetts's TAFDC changes twice until the study moves to 2.4.4 or later.

(Edited: the first version gave main's line numbers; the TAFDC paragraph came later.)

This branch was successfully deployed

1 active deployment
Preview — 7267996c Deployed Oct 17, 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