Repository navigation
Conversation
The site said the shift moves labor income to capital income in proportion to existing holdings, and that the state measure nets out state-funded benefits. The shift scales every positive amount of six capital income flows by one common factor, and the state measure subtracts only the programs in household_state_benefits, so it leaves out Medicaid, CHIP and TANF (apart from Massachusetts's TAFDC). The sweep's revenue option also read "Net federal revenue change" for the all-government total, and the federal chart gave no sign that its payroll band holds employers' state and local payroll taxes. Copy only: the four data files change only in their description strings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The income-shift and policy-analysis pages' experiment cards also said the shift redistributes labor income "in proportion to existing holdings". The phrase spans two source lines there, so the first pass missed it. Both pages serve the US and the UK, so the cards describe the common scaling factor without listing one country's income flows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of a8c921d and 9d91554 found the federal chart note wrong about local income taxes. At policyengine-us 1.764.6, New York's and Maryland's state income tax lists include New York City's and the Maryland counties' income taxes, so they count in those states' charts. The taxes no chart shows are workers' state payroll taxes, the Additional Medicare Tax, and the city and county income and occupational taxes in local_income_tax_before_refundable_credits and local_occupational_tax. The state measure text now says New York's and Maryland's lines carry those local taxes and names New Jersey's property tax relief among the other state-paid programs; the scenarios page says the total counts local taxes too; and the state-exposure module docstring drops "state-funded benefits". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The federal chart note named Philadelphia's wage tax as an example of the city and county taxes that sit in no chart. At policyengine-us 1.764.6 that tax reads pa_philadelphia_wage_tax_taxable_wages, an input that defaults to 0, and neither cached dataset build from June or September 2026 has such a column, so it adds nothing to the published figures. Louisville's occupational license tax reads county_fips and earnings, so the note names it instead. The state ranking caption, SCOPE_NOTE and the state exposure docstring now give New York's and Maryland's local taxes their own sentence, which also says New York's figures net New York City's refundable credits. Prettier passes again on ShiftSweep.jsx, IncomeShift.jsx and PolicyAnalysis.jsx, and the AIScenarios paragraph this PR rewrote now follows Prettier's wrapping. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
At policyengine-us 1.764.6 the state measure carries more local items than New York City's and Maryland's taxes. Maryland's refundable credits add md_montgomery_eitc, Montgomery County's match of the state EITC. California's add ca_sf_wftc, San Francisco's Working Families Tax Credit, and household_state_benefits lists three Los Angeles programs (EZ Save, the infant supplement and the expectant parent payment). Each reads county_str, and the dataset builds carry a county for every household, so each can move a state's figure. A search of every refundable credit list against the variables under gov/local finds no other local item. The state ranking caption, SCOPE_NOTE (and the JSON it writes) and the state exposure docstring now list them all, and ShiftSweep.test.jsx checks the caption's list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Three of the listed items are tax credits (New York City's, Montgomery County's and San Francisco's), so the caption, SCOPE_NOTE (and its JSON) and the state exposure docstring now open the list with "A few local taxes, credits and programs". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8 of 11 tasks
- The stat card and the state ranking write their measures as equations, and "we" leaves out health coverage, Medicaid, CHIP and TANF, so no measure acts. - The federal chart note says we count three groups of taxes only in the net government revenue total, in two sentences where one ran to 47 words. - The state ranking and the state exposure scope note name Los Angeles County's EZ Save program, infant supplement and expectant parent payment, and split the 41-word list of local items by state. - The method text and the data descriptions give the scaling and the current-law simulation to "we", replace "This is" and "The exercise is" with what happens, cut "Reconciles to the household net-income identity", and drop the italic "and". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9 of 10 tasks
MaxGhenis
added a commit
that referenced
this pull request
Nov 10, 2026
The copy for a run that counts health coverage and TANF now names who acts: Congress sets each state's TANF block grant at a fixed amount, and the federal government still matches emergency care for enrollees whose immigration status bars federal matching. It carries #51's wording for the taxes outside the charts and for the local items in the state figures, and no sentence runs past 32 words. analysis/tests/fixtures/state_health_programs.json lists every program in health_tanf.STATE_HEALTH with the state that runs it. test_health_tanf.py checks the list against STATE_HEALTH, and ShiftSweep.test.jsx reads it in place of a hand copy (review r3's F10). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The method-copy rewrite left three lines of the summary paragraph wider than Prettier wraps them. Same words, new line breaks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Nov 10, 2026
Same code and words; Prettier rewraps seven spots in ShiftSweep.jsx, its test and the metadata test. One of them matches the rewrap on #51. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The state ranking, the state exposure scope note and its module docstring now credit EZ Save to the Los Angeles Department of Water and Power, a City of Los Angeles department. They keep Los Angeles County for the infant supplement and the expectant parent payment, which its Department of Children and Family Services pays. The AI scenario note named the proportional variant whichever variant the reader picked. It now names the selected one, gives the figure "we estimate", and names the use tax the figure includes. A test pins the wording for three of the variants. We now count the state-paid programs and put New York City's and Maryland's local income taxes in those states' charts, and the market Gini summary says that we move the income. The scope note says we count no sales, property, corporate or severance taxes, since policyengine-us computes state_sales_tax; the docstring says the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Nov 10, 2026
Brings in #51's credit of EZ Save to the Los Angeles Department of Water and Power, the AI scenario note that names the selected wage variant, the reworded federal-line and ranking sentences, and the state exposure script's docstring and scope note. ShiftSweep.jsx conflicted in two places. This branch keeps its OUTSIDE_CHART_TAXES_NOTE and the health and TANF notes around it, with #51's last sentence ("We put New York City's and Maryland's local income taxes in those states' charts instead."). The state ranking description keeps this branch's two forms, with and without health coverage and TANF, in #51's words ("We count state SSI supplements...", and California's LADWP and Los Angeles County programs) in each. At this commit, eslint, vitest (12 files, 51 tests) and the CI-like pytest run (280 passed, 66 skipped) all pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The state ranking, the state exposure scope note and its docstring credited the infant supplement and the expectant parent payment to Los Angeles County. policyengine-us 1.764.6 computes them only there, but its own parameters credit both foster care payments to the California Department of Social Services. Build p carries no electricity bills and no foster care placements, so these two and EZ Save pay nothing. The copy now names only San Francisco's Working Families Tax Credit, and the docstring says why. The UK revenue note read as a fragment and left out Capital Gains Tax and employers' National Insurance, which the UK total counts. The UK revenue description and note now name both, in uk_shift_sweep.py and the UK data file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Nov 10, 2026
One conflict, in the state ranking description: this branch keeps its two forms of the measure, with and without health coverage and TANF, and takes #51's closing sentence, which names only San Francisco's Working Families Tax Credit among California's local items. eslint, vitest (13 files, 55 tests) and the CI-like pytest run (280 passed, 66 skipped) pass at this commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Nov 10, 2026
The UK sweep's callout now ends with #51's full sentence on what the UK total counts. A test renders the UK data file and pins the whole callout. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… total The decile chart priced the UK sweep in dollars. Its description, axis ticks, axis label and tooltip now take the sweep's currency symbol, so the UK view reads in pounds. In share mode, the description said the chart leaves out D1 because its baseline mean is negative. No decile in either sweep has a baseline mean net income of zero or less, so the chart drops none. The description now names each decile the chart leaves out, read from the data, and adds nothing when it leaves out none. Its first sentence now names who sorts the households: "We sort households into deciles by weighted baseline market income and keep each household in its baseline decile in every scenario." The UK revenue summary listed the same taxes as the revenue description above the chart. It now says what moves the total, as the US summary does. We estimate Income Tax and Capital Gains Tax receipts, taken together, climb from -£3.2B at a 10% shift to +£156.9B at 100%. Over that range, National Insurance receipts fall from -£24.7B to -£210.0B, and household benefits rise from +£2.0B to +£25.9B. The state exposure docstring spells the Los Angeles Department of Water and Power's program EZ-SAVE, as LADWP does, and splits the sentence that lists the three Los Angeles programs. Its scope paragraphs now say that this script counts none of the sales taxes Texas and Florida collect, and that policyengine-us 1.764.6 counts Washington's capital gains excise as state income tax. Two new tests pin the UK view's pounds and summary, and the sentence that names each decile the chart leaves out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
We change copy only. After we drop their description strings, the four data files match main, so no number on the site changes.
The shift. On main, we describe the shift as moving the freed labor income to capital "in proportion to existing holdings".
labor_capital_shift._apply_shiftscales every positive amount of the capital income flows inconstants.CAPITAL_INCOME_VARS(long- and short-term capital gains, taxable interest, qualified and non-qualified dividends, rental income) by one common factor.uk_shift_sweep._apply_shiftdoes the same for the UK's flows: savings interest, ISA interest, dividends, property income and capital gains. Each person then gains in proportion to the capital income they already receive, and losses stay as they are. We rewrote the US and UK sweep descriptions, the labor-shift description, their data files, two chart captions and the "The experiment" cards on the income-shift and policy-analysis pages to say that. Both pages serve the US and the UK, so on their cards we describe the common factor without listing one country's flows.The state measure. On main, we call the subtracted benefits "state-funded benefits", and a reader would take that to mean everything a state pays for. We subtract only
household_state_benefits, the programs PolicyEngine counts as state-paid. At policyengine-us 1.764.6, the version behind the published state figures, PolicyEngine counts state SSI supplements, child care subsidies and other programs, such as New Jersey's property tax relief, as state-paid. It leaves Medicaid, CHIP and TANF off that list, apart from Massachusetts's TAFDC.New York's and Maryland's figures include New York City's income tax and refundable credits, Maryland's county income taxes and Montgomery County's earned income credit (
md_montgomery_eitc). California's include San Francisco's Working Families Tax Credit (ca_sf_wftc, one of California's refundable credits) and three Los Angeles County programs inhousehold_state_benefits:ca_la_ez_save,ca_la_infant_supplementandca_la_expectant_parent_payment. We checked every refundable credit list and the household benefit lists against the variables undergov/localand found no others. We rewrote the state exposure scope note and the state ranking caption to say all this, and dropped "state-funded benefits" from the scenarios page's revenue note. We also cut the caption's claim that the chart shows only states with an income tax: in dollars, it ranks every state instate_deltas.The revenue label. On main, we label the sweep's revenue option "Net federal revenue change", but the chart plots
revenue_change_b, an alias oftotal_rev_change_b, which nets federal, state and local taxes against transfers. We relabeled it "Net government revenue change", the UK sweep's label. We also rewrote its description and the scenarios page's revenue note to say we count local taxes in the total and leave out health coverage. At 1.764.6,household_health_benefitsreturns zero unless a run switches ongov.simulation.include_health_benefits_in_net_income, and we leave that parameter at its default, off.The federal chart.
buildFederalRowadds up its own bands rather than taking the total less the states. At 1.764.6,employer_payroll_taxincludes employers' state unemployment insurance and other state and local payroll taxes, so the federal payroll band holds them, and the benefits band includes TANF. We count three groups of taxes only in the total: workers' state payroll taxes such as California's SDI, the Additional Medicare Tax, and local taxes on income and occupations. PolicyEngine adds up those local taxes inlocal_income_tax_before_refundable_creditsandlocal_occupational_tax. It counts New York City's and Maryland's local income taxes instate_income_tax_before_refundable_credits, so they land in those states' charts. On the published sweep at a 10% shift, the total less the states comes to -$138.2B, against the federal chart's -$131.3B. We added a note under the US federal chart to say so.Analysis notes. On main, in
california_shift.pyandcalifornia_summary.pywe call "all governments less the states" the published site's federal line. We now call it the splitcalifornia_summaryapplies to the published sweep, and in the module docstring we explain how the site's federal chart differs. We replaced "state-funded benefits" withhousehold_state_benefitsincompute_transfer_detail.pyandcompute_state_exposure.py.Voice. We gave the method copy and the data descriptions actors and shorter sentences. In them, we now move the income, run the current-law simulation and name what we leave out, and we write the stat card's and the state ranking's measures as equations. We split the federal chart note's 47-word sentence in two and the 41-word list of local items by state, and named the three Los Angeles County programs. We also cut "Reconciles to the household net-income identity" from the revenue description.
Some of the strings we fixed don't render on the site today:
ShiftSweepdoesn't read the sweep'smetadata.description, no page rendersLaborShift.jsx, and no page importsstateExposureData.json. We fixed them too, since the published JSON carries them and every future run rewrites them.What this leaves alone
paper/sections/methodology.tex:55and:115-116("in proportion to existing holdings") andpaper/sections/results.tex:164("State-funded benefit responses"). On Match the Budget Lab's 9 Oct 2026 revision: rerun scenarios, regenerate site, memo and paper #45's head (7267996), those lines sit at:55,:124-125and:166. In Match the Budget Lab's 9 Oct 2026 revision: rerun scenarios, regenerate site, memo and paper #45 we regenerate the paper and its PDF, so we'll make the fixes there rather than rebuild the PDF by hand here. We left a comment on Match the Budget Lab's 9 Oct 2026 revision: rerun scenarios, regenerate site, memo and paper #45 to hand them off.AIScenarios.jsxparagraph and regeneratestateExposureData.jsonfromSCOPE_NOTE. Whichever PR we merge second, we'll keep this PR's copy when we resolve the conflict.household_benefits, once throughtanfand once throughhousehold_state_benefits. Those include 1.764.6 and 2.2.1, the version the policyengine 6.16.0 bundle pins. In a one-household run,household_benefitsreturns $19,072 for $9,536 of TAFDC. PolicyEngine fixed the double count in 2.4.4 (Count MA TAFDC once in household benefits policyengine-us#9478), andcalifornia_shift.pyalready counts TAFDC once.Checks
bun run lint -- --max-warnings=0: clean.bun run test:run: 10 files, 36 tests passed.ShiftSweep.test.jsxnow checks the revenue label, the health exclusion, the federal chart note and the state caption's list of local items.pytest analysis/tests -qon Python 3.11 with numpy, pandas, pytest and hypothesis, as CI installs: 188 passed, 13 skipped.lint-and-testand the Vercel preview build pass.SCOPE_NOTEmatches the scope note instateExposureData.json.ShiftSweep.jsx, so it now passes, asIncomeShift.jsxandPolicyAnalysis.jsxdo.AIScenarios.jsxkeeps main's three Prettier differences, which sit outside this PR's lines.model_urlinshiftSweepData.json, on the line after the description this PR rewrites, and the two edits conflict. When Remove retired dataset names from the study site #50 merges, we'll rebase onto main, keep Remove retired dataset names from the study site #50'smodel_urland this PR's description, and rerun these checks along with Remove retired dataset names from the study site #50's retired-name test.We stacked #53 on this branch, and we'll keep this PR in draft until #50 merges.
🤖 Generated with Claude Code