Repository navigation
Audit the Tax Table against the rate schedule in the federal income tax references (evidence only; no score changes) - #214
Conversation
…ax references (evidence only; no score changes) PolicyBench's federal income tax references apply the section 1 rate schedule exactly. The Form 1040 instructions send a filer with taxable income under $100,000 to the Tax Table of 26 U.S.C. 3. This audit makes the choice between them decision-ready and changes no reference, exclusion, score, payload, card, paper or snapshot. reference_audit/2026-10-10-tax-table/: - law/: the statute, instructions, worksheets and revenue procedures read on 2026-10-10, as checked excerpts, with the IRS's 2025 Tax Table and its draft 2026 table as CSV. - scripts/tax_table.py builds the table from a rate schedule. It reproduces all 8,248 amounts of the 2025 table and all 8,248 of the 2026 draft. - scripts/sweep_tax_table.py recomputes every output on the release's reference system with the table in place of the schedule: 21 of 84 scored federal income tax references move by more than $1, and two scored federal refundable credit references. - scripts/leaderboard_impact.py scores the release under the schedule, either value, and table values, with the repo's scorer and an independent one that agree to 2.8e-14 points. - scripts/state_tax_tables.py records which states prescribe a table, as a scoped follow-up. tests/test_tax_table_audit.py states the construction's invariants as property tests and checks the recorded evidence against the release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The review (GPT-6.1 Sol) confirmed the numbers and asked for changes to what the README claims. - The 2026 table: "none found before the freeze", with the search stated. Archived copies of the IRS's draft listing up to 08:09 UTC on the freeze day show no tax table draft (law/draft_listing_history.json); the IRS's own posting dates replace PDF metadata where they exist. - The recommendation is framed as a choice of what the output means, with the case for each other option, and no longer leans on Form 1040-ES or on how models answer. - The instructions' five other methods are listed; Form 8615 and Schedule J are named as not read and not in the engine. The Foreign Earned Income Tax Worksheet's line 5 is quoted: it does use the Tax Table. - The rounding variant is a look-up rounding sensitivity. An amount that rounds up to $100,000 now takes the worksheet on the rounded amount. - The states section no longer infers anything from cents. - Tests check the second look-up, derive the income classes from the cells, and cover the ceiling transition and the archived listings. The mutation run covers the sweep's look-up: 34 of 34 killed. No reference, exclusion, score, payload, card, paper or snapshot changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The review found all eleven first-round points resolved and raised three. - The decision section said the evidence settles what a return shows. It now says what the audit shows (what the references compute, and the same computation with each look-up under $100,000 on the constructed table) and that the 21 + 2 counts are sensitivities of the engine's computation, not verified filing amounts. - What the households' facts say about the two unread methods is recorded and tested: 36 of the 38 filers the table applies to are 25 or older, which rules out Form 8615; two are 22 and 23; two have farm losses, where Schedule J is the filer's choice. - Table-only matches are described as a reason to read a model's explanations, not as its reading of the question. - The rounding summary's maximum is taken over returns with $100,000 or more of taxable income. - The archived draft listing's 251 rows are listed, and described as a sample. No reference, exclusion, score, payload, card, paper or snapshot changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The recommendation no longer says the models' answers show how the prompt is read. It gives the count: 173 of 987 answers within $1 of the schedule value, 2 within $1 of the table value alone. - Form 8615's living-parent condition is quoted from the instructions. - The size of the IRS draft listing at each archived capture is read from the page and recorded (1,215 to 1,219 drafts up to the freeze). No reference, exclusion, score, payload, card, paper or snapshot changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The sentence applied the student condition to every filer under 24. The quoted conditions require it only of a filer aged 19 to 23. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review record before merge (head Independent review: GPT-6.1 Sol through Subfleet (
One point of round 1 was not accepted, and the reviewer agreed in round 2: line 5 of the Foreign Earned Income Tax Worksheet does send its look-up to the Tax Table, so the sweep's code stands. The passage is now in What the review could not check, in its own words: the source documents and archived pages are not in the repository, so the excerpts, the 251 listed drafts and the absence of an earlier 2026 table cannot be authenticated from the pull request alone; Form 8615, Schedule J and complete filed-return amounts remain unchecked; it ran no script or test. Gates at this head: The reviews and the author's responses are kept on the maintainer's machine under |
Audits one convention behind every federal income tax reference: the references apply the 26 U.S.C. 1 rate schedule exactly, where the Form 1040 instructions send a filer with taxable income under $100,000 to the Tax Table. Evidence only: no reference, exclusion record, score, payload, benchmark card, paper or frozen snapshot changes. Which convention PolicyBench uses is Max's call, queued as cos decision d1263 and not yet ruled. The full record is
reference_audit/2026-10-10-tax-table/README.md.The point was raised by the independent review of scenario_039 in #213 ($8,600 on the table against the $8,596.03 reference).
Findings
Leaderboard impact
Each case is scored by the repo's scorer (
policybench.cli analyzeandweighted_hit_rate_scores_by_model) and by an independent re-aggregation that imports nothing frompolicybench. They agree to 2.8e-14 points, and the unchanged copy reproduces the published payload.The decision is what the output means
The audit shows what the references compute, and what the same computation gives when each look-up under $100,000 uses the constructed table. It does not establish what any household's filed return would show: that also depends on two methods not read (Form 8615 and Schedule J), on whether the filer rounds the return, and on a 2026 table published only as a draft. Three readings of the output are open:
Recommendation
Reading 2: keep the rate schedule and state the definition in the card, the paper and the v2 prompt (#165). This is a judgment about what the benchmark should measure, not a finding of law. The schedule needs no convention beyond the published rates, where the table adds its bands, a midpoint rule no document read states, and a choice about rounding the looked-up amount (which moves scenario_042 by $6). PolicyBench's amounts are computations to the cent, which a return need not be. It changes no score.
Its cost: the current prompt does not say which computation is wanted. The line 16 instructions say a filer under $100,000 "must use the Tax Table", and where that governs a household's return, an answer that follows it is scored a miss (21 federal cells in the sweep). The README gives the case for each other option and what each would take.
Invariants
For the constructed table, at every taxable income under $100,000, filing status column and year (property tests,
tests/test_tax_table_audit.py):Differential tests:
No counterexample was found. The mutation run kills 34 of 34 deliberate faults. The first run left two standing, both now held: a wrong top rate, which a random property test misses in 13 of 40 seeded runs with the income generator first used (
scripts/top_rate_detection.py), and a parser that read past the table.States
A scoped follow-up, not an audit: 12 of the 21 states that hold a nonzero scored state income tax reference prescribe a tax table (8 make it mandatory), covering 16 of 31 such references. Every quotation was checked against the state's own document. Nothing is recomputed.
Review
An independent GPT-6.1 Sol review found the numbers correct and asked, over two rounds, for changes to the claims (commits b2db187 and 1d3d4f9): the return-level statements made conditional, with what the households' facts say about Form 8615 and Schedule J; "none found" in place of "none existed" for a pre-freeze 2026 table, with the search stated; the recommendation framed as a choice of definition; the instructions' other methods listed; the rounding variant fixed at the ceiling and relabelled; the states section's inference from cents removed.
Test plan
uv run pytest tests/test_tax_table_audit.py: 54 passed locally.uv run ruff check .anduv run ruff format --check .: clean.🤖 Generated with Claude Code