Skip to content

Correct eight Vermont renter credit income limits to HUD's limits - #10125

Merged
MaxGhenis merged 3 commits into
mainfrom
fix-vt-renter-credit-income-limits
Oct 13, 2026
Merged

MaxGhenis merged 3 commits into
mainfrom
fix-vt-renter-credit-income-limits

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Problem

The Vermont renter credit uses two county-by-household-size tables: the full-credit limit (thirty_percent.yaml) and the partial-credit limit (fifty_percent.yaml). 32 V.S.A. § 6061(19)–(20) define them from HUD's Section 8 income limits as of June 30: the extremely low-income limit, and 1.3 times the very low-income limit. For Franklin and Grand Isle, they use the state average.

Following up on #10116: PE's 2025 partial limit for Washington County, 7 people, was $88,880. The TY2025 booklet prints the same figure, but the department's 2025 Renter Credit Website Calculator has $88,990.

What HUD says

  • HUD's limit. HUD's FY2025 very low-income limit for Washington County, VT, 7 persons, is $68,450.
    • HUD's FY2025 Section 8 workbook (Section8-FY25.xlsx, column l50_7) has it; the Wayback copy is byte-identical to the live huduser.gov file.
    • PE's own bundled HUD table has the same value (gov/hud/income_limits/section8_income_limits.csv, county 50023, 2025, very_low_income_7).
    • HUD's FY2025 methodology derives it the same way: 7 persons = 124% of the 4-person limit, so 1.24 × $55,200 = $68,448, rounded up to the nearest $50.
  • The statutory limit. 1.3 × $68,450 = $88,985, which the department rounds to $88,990, the calculator's figure.
  • The booklet is a typo. No HUD limit can produce $88,880: HUD limits are multiples of $50, and the nearest candidates give 1.3 × $68,350 = $88,855 and 1.3 × $68,400 = $88,920. The same booklet row also prints size 6 as "$83270" with no comma.

Department rounding. I inferred it and checked it against every 2023–2025 calculator cell and every 2021–2025 booklet cell; it reproduces all of them except two booklet typos.

  • Each limit is rounded to the nearest $10, half up.
  • Franklin and Grand Isle use the average across Vermont's twelve HUD areas: the 11 nonmetro counties plus the Burlington–South Burlington MSA. That average is rounded to $10 before the multiplier.
  • The 2021–2023 tables equal HUD's limits with no 1.3 multiplier; 2024–2025 use 1.3.

Every cell checked

I compared all 1,120 cells (both tables, 14 counties, sizes 1–8, 2021–2025) against:

  • HUD's FY2021–FY2025 workbooks;
  • the department's 2023–2025 calculators;
  • the 2021–2025 booklets.

Eight PE cells disagreed with HUD, the calculator and the booklet, which all agree with each other on those cells (except the 2025 Washington cell, where the booklet carries the typo):

Year Table County Size PE before Corrected HUD basis
2025 partial Washington 7 88,880 88,990 1.3 × 68,450 (booklet prints 88,880)
2024 partial Chittenden 8 102,850 102,050 1.3 × 78,500
2024 partial Washington 3 61,960 61,690 1.3 × 47,450
2024 full Caledonia 4 30,000 31,200 ELI 31,200
2023 partial Franklin 7 56,250 58,320 state average (swapped with Lamoille)
2023 partial Lamoille 7 58,320 56,250 VLI 56,250
2021 partial Windsor 2 31,350 31,550 VLI 31,550
2021 full Chittenden 5 31,040 31,050 ELI 31,050

The only other disagreement is a second booklet typo, which PE already handled correctly: the TY2021 booklet prints $41,120 for Washington, 7 people, full credit. HUD has $40,120, as does every other county in that booklet row, and PE already had $40,120. 2022 has no mismatches.

Changes

  • Values. Correct the eight cells above.
  • Comments. Add a YAML comment at each of the two cells where PE departs from the booklet it cites (2025 partial and 2021 full, Washington, 7 people).
  • References. Cite § 6061(19)/(20), the 2023–2025 calculators and HUD's FY2021–FY2025 workbooks.
  • Metadata. Fix fifty_percent.yaml's unit (/1 → currency-USD) and the 2022 booklet page for the full-credit table (page 35 → 36, where the table is).

Merge check (hub, at 62b935ee7f). Merging main changed no file outside #10130's five and main's own: every other file the merge touched matches main at 2f3053c845 (the Virginia 529 files and one changelog fragment are deleted on main and absent here too). vt_renter_credit.yaml holds exactly the union of both sides' cases: 20 from this PR and 25 from main, 34 in all, with the 11 shared cases once.

Tests

Revalidated merged head 62b935ee7f3740f9615a0c46813707af35806a0a after merging main 2f3053c8452f3900ca28c94bf406c708ed31a7c6 (#10130). Each file ran in its own foreground process, sequentially, with the six prescribed thread-limit settings.

File under policyengine_us/tests/policy/baseline/gov/states/vt/tax/income/credits/rent/ Result
vt_renter_credit.yaml 34 passed
vt_renter_credit_countable_tax_exempt_ss.yaml 2 passed
vt_renter_credit_integration.yaml 2 passed
test_vt_renter_credit_income_limits.py 540 passed
test_vt_renter_credit_amounts.py 12 passed
  • All 25 main YAML cases and all nine income-limit cases are retained. No credits/renter/ test directory exists.
  • Recomputed all nine added cases by hand using Match Vermont renter credit base amounts for Franklin and Grand Isle to the department's tables #10130's whole-dollar base amount and final half-up rounding. Expectations remain 1,186 / 2 / 0 / 0 / 1,988 / 952 / 934 / 604 / 2,500; comments now show the rounded base before the phase-out. In particular, Lamoille 2023 uses a $1,867 base: 0.5 × 1,867 = 933.5 → 934.
  • The income-limit differential test checks HUD parity and the invariants below. The amount test checks the department's tables, income phase-outs and random incomes, including corrected limits.
  • make format passes (Ruff format and lint); git diff --check passes.
  • Local runner note: imports and Hypothesis collection were unusually slow. An interrupted collection and a diagnostic run produced no case results; the standard retry reused the writable Hypothesis cache and retained all original tests and settings.

Invariants

The new Python test checks these exhaustively:

  • Statutory definition. Each 2024+ cell equals 1.3 × HUD's very low-income limit (partial) or HUD's extremely low-income limit (full), rounded to $10.
  • Monotonicity. Within a county and year, both limits are nondecreasing in household size.
  • Ordering. The full-credit limit is below the partial-credit limit in every cell.
  • Franklin and Grand Isle. Both use the same state average, so their rows are equal. On main this caught the 2023 swap.
  • Granularity. Every limit is a multiple of $10.

Hub microsimulation impact (current head)

A real microsimulation on the default dataset, main at the merge base 2f3053c845 against this PR's head 62b935ee7f, for 2024 and 2025 and 2026. The runs went one at a time under the shared heavy-job lock. Sums are weighted.

Output 2024 change 2025 change 2026 change 2024 records changed (weighted) 2025 records changed (weighted) 2026 records changed (weighted)
state_income_tax +0 +0 +0 0 (0) 0 (0) 0 (0)
income_tax +0 +0 +0 0 (0) 0 (0) 0 (0)
household_net_income +0 +0 +0 0 (0) 0 (0) 0 (0)
household_benefits +0 +0 +0 0 (0) 0 (0) 0 (0)

Run on the standard outputs. vt_renter_credit feeds state_property_tax_credits, which no household tax, income or benefit total here reads, so none of them changes in any year. The credit itself is not listed because requesting it across the whole population crashes on main without #10116's guard.

Comparison files are in fixes/10125-impact/ on the hub host.

Impact

Households in the eight county × size cells can move, in the years each limit covers.

  • Where in the income range. The partial credit phases out between the full-credit and partial-credit limits, so changing either limit changes the credit across that whole range, not only between the old and new limit. Example (Washington, 7 people, TY2025, income $68,820): $1,183 → $1,186.
  • Size of changes. Unassisted renters move by a few dollars to a few hundred: Washington, 7 people, TY2025, income $88,872: $0 → $7; 2023 Franklin, 7 people, income $51,870: $770 → $952. Subsidized renters can move more: 2023 Franklin, 7 people, income $56,250, annual rent $25,000, with housing assistance and no sharing: $0 → $401.
  • Years. The source-verified tax years are 2021–2025. PE carries the earliest (2021) values back to 2015–2020 and the latest (2025) values forward to 2026 on, so those modeled years move too (for example, the added Windsor household changes $594 → $604 in 2020).
  • Consumers. vt_renter_credit feeds state_property_tax_credits.
  • The hub's full-file microsimulation is below.

Evidence (sources with SHA-256 hashes, scripts, per-year comparison output, calculator recalculation): ~/reviews/vt-renter-income-limits-2026-10/.

The earlier follow-up on Franklin and Grand Isle's whole-dollar fair market rents is resolved by #10130 (merged into this branch).

The renter credit encoding in rulespec-us#1678 (us-vt/statute/32/6061) takes the § 6061(19)–(20) limits as leaf inputs; this PR's finding is added there: the TY2025 booklet's Washington 7-person partial limit is a typo, the department's rounding rule, and a companion test whose ground truth is HUD plus the calculator.

axiom: TheAxiomFoundation/rulespec-us#1678 queued

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 11, 2026 16:27
Check every 2021-2025 cell of the full and partial credit income limit
tables against HUD's Section 8 limits (x1.3 for 2024-2025, state average
for Franklin and Grand Isle), the department's 2023-2025 calculators and
the booklets. Eight PE cells disagreed with all of them:

- 2025 Washington, 7 people, partial: 88,880 -> 88,990 (the TY2025
  booklet prints 88,880; the calculator and 1.3 x HUD's 68,450 give
  88,990)
- 2024 Chittenden 8 partial 102,850 -> 102,050; Washington 3 partial
  61,960 -> 61,690; Caledonia 4 full 30,000 -> 31,200
- 2023 Franklin and Lamoille 7 partial were swapped
- 2021 Windsor 2 partial 31,350 -> 31,550; Chittenden 5 full
  31,040 -> 31,050

Also fix the partial table's unit (/1 -> currency-USD) and the 2022
booklet page for the full table, and cite § 6061(19)-(20), the
calculators and HUD's workbooks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
For every year both cover (2024 onward), each partial-credit limit must
equal 1.3 times HUD's very low-income limit and each full-credit limit
HUD's extremely low-income limit, rounded to $10, with the state-average
rule for Franklin and Grand Isle. Across all years, limits rise with
household size, the full limit stays below the partial limit, and
Franklin equals Grand Isle. On main's tables the test fails on the four
2024-2025 cells this branch corrects and on the 2023 Franklin/Lamoille
swap.

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

Copy link
Copy Markdown
Contributor Author

The CI run on this pull request was cancelled at 23:27Z on 2026-10-11 to free the organization's shared GitHub runners for an urgent fix in another repository. The US + core hub will re-run it automatically (cancelled jobs only; jobs that had passed are kept). Nothing in this pull request changed. Please don't push or reopen just to restart CI.

Main's #10130 changed vt_renter_credit.py (base rounded to whole dollars,
final credit half up) and appended cases to vt_renter_credit.yaml. Every case
from both sides is kept; a rounding audit shows none of this PR's nine
expectations change under main's rounding. 590 tests pass on this tree.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit c5412ad into main Oct 13, 2026
26 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

US + core hub merge audit, us#10125 at 62b935ee7f3740f9615a0c46813707af35806a0a (squash): Correct eight Vermont renter credit income limits to HUD's limits.

@MaxGhenis
MaxGhenis deleted the fix-vt-renter-credit-income-limits branch October 13, 2026 18:24
@DTrim99

DTrim99 commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Correct eight Vermont renter credit income limits to HUD's limits

PR #10125 (author: MaxGhenis, head 62b935ee7f, merge-base 2f3053c845). 5 files (+351/−10), 3 commits (the third merges main after #10130). Axiom: TheAxiomFoundation/rulespec-us#1678 queued.

Note: the PR was squash-merged into main as c5412ada21 on 2026-10-13 at 18:24 UTC, before this first-round review finished. The verdict below is retrospective, and the suggestions are follow-ups.

Summary

The PR corrects eight cells in the two county-by-household-size tables behind the Vermont renter credit:

  • Partial-credit limit (income_limit_ami/fifty_percent.yaml):
    • 2021 Windsor, 2 people: 31,350 → 31,550
    • 2023 Franklin and Lamoille, 7 people: the two values were swapped
    • 2024 Washington, 3 people: 61,960 → 61,690
    • 2024 Chittenden, 8 people: 102,850 → 102,050
    • 2025 Washington, 7 people: 88,880 → 88,990
  • Full-credit limit (thirty_percent.yaml):
    • 2021 Chittenden, 5 people: 31,040 → 31,050
    • 2024 Caledonia, 4 people: 30,000 → 31,200
  • Metadata.
    • It fixes the partial table's unit (/1 → currency-USD) and the 2022 booklet page for the full table (35 → 36).
    • It adds § 6061(19)/(20), the 2023–2025 department calculators and HUD's FY2021–FY2025 workbooks as references.
    • It adds a comment at each of the two cells where PE departs from a booklet typo.
  • Tests.
    • Nine YAML cases, one per corrected cell plus a case between the booklet's and the corrected 2025 limit.
    • A Python test with 540 parametrized cases. It checks the 2024–2025 tables against PE's bundled HUD limits and runs invariant checks on every year.

All of the policy content is right:

  • Every cell checks out. I recomputed all 1,120 cells (2 tables × 14 counties × 8 sizes × 2021–2025) from HUD's workbooks and compared them with the head:
    • HUD: every cell matches HUD's limits under the department's rounding.
    • Booklets: every cell matches the 2021–2025 booklets except the two typos the PR documents.
    • Calculators: every cell matches the 2023, 2024 and 2025 calculators (672 cells).
    • Changed cells: the eight changed cells are exactly the eight cells where the merge-base disagreed with HUD.
  • Statutory timing. The 1.3 multiplier applies to 2024–2025 only, which matches the session laws (below).
  • Tests. All nine YAML expectations reproduce by hand, and each one fails on the old values.
  • CI is green.
  • Merge. Merging the head into main reproduces main's tree exactly.

I found no critical and no should-fix items. Five suggestions follow. Two of them are pre-existing problems in the same credit that sit next to this PR's changes:

  • the Act 169 dates are a year late
  • the 2026 limits carry the 2025 values forward

Critical (must fix)

None.

Should address

None.

Suggestions

1. Pre-existing, outside this diff: the Act 169 (2026) renter credit expansion is dated a year late.

  • Where:
    • parameters/gov/states/vt/tax/income/credits/renter/max_credit.yaml:6-7 (2027-01-01: 3_250, 2028-01-01: 2_500)
    • fmr_rate.yaml:7-8 (2027-01-01: 0.125, 2028-01-01: 0.1)
  • The law. 2026 Vt. Acts No. 169 (H.949), Sec. 16(b) (PDF p. 18): "Secs. 8 and 9 (one-year renter credit expansion) shall take effect on July 1, 2026, and apply to claim year 2027."
    • 32 V.S.A. § 6061(9): "'Taxable year' means the calendar year preceding the year in which the claim is filed."
    • § 6061(12): "'Claim year' means the year in which a claim is filed under this chapter."
    • So claim year 2027 is taxable year 2026.
  • PE's convention. Every other renter-credit table is keyed by taxable year.
    • The 2021-01-01 income limits are the "2021 Partial Credit Income Limits" in the TY2021 booklet (p. 34). That booklet says the changes "will impact claims filed during the 2022 income tax filing season for rental activity that occurred during the 2021 calendar year."
    • They are also HUD's FY2021 limits, "as of June 30 of the taxable year" (§ 6061(19)–(20)).
  • The problem. Apply Vermont Act 169 (2026) renter credit changes #8749 dated the Act 169 values by claim year, so they land on TY2027 instead of TY2026.
    • PE's 2026 credit uses 10% and $2,500 where the law gives 12.5% and $3,250.
    • PE's 2027 credit uses the expansion values a year late.
  • The axiom issue repeats the slip. rulespec-us#1678's required output 7 says "Encode the TY2027 Act 169 values separately".
  • Fix (separate PR and issue):

2. The 2026 limits carry the 2025 values forward, although PE already bundles HUD's FY2026 limits.

  • Where: both tables end at 2025-01-01. gov/hud/income_limits/section8_income_limits.csv already has year == 2026 rows.

  • The law. § 6061(19)–(20) take HUD's limits "as of June 30 of the taxable year", so TY2026 uses FY2026. Under the department's rule (the one this PR documents), PE's bundled FY2026 table gives:

    Limit 2025 value PE uses for 2026 FY2026 value
    Washington, 7 people, partial 88,990 91,910
    Chittenden, 1 person, partial 59,090 56,750
    Chittenden, 1 person, full 27,300 26,200
    Addison, 7 people, full 48,650 50,040
  • No tracking issue. None exists for TY2026 renter-credit tables.

  • Fix: add 2026-01-01 cells derived from HUD FY2026, or file an issue to add them when the TY2026 booklet is out. test_vt_renter_credit_income_limits.py takes HUD_YEARS as the overlap of table years and bundled HUD years, so it would check 2026 automatically. The same carry-forward affects fair_market_rent.yaml.

3. Cite the session laws that set when the 1.3 multiplier starts.

  • Where: fifty_percent.yaml:13-16. The comment says the tables equal HUD's limit "for 2021-2023 and 1.3 times it for 2024-2025" and cites only "32 V.S.A. § 6061(20)".
  • Why that isn't enough. The current § 6061(20) has 1.3 for all years, and its history note gives only the effective date of passage. The year split comes from the session laws:
    • 2020 Vt. Acts No. 160 (H.934), Sec. 1 (PDF p. 3): "'Very low-income limit' means the limit as determined by the U.S. Department of Housing and Urban Development pursuant to 42 U.S.C. §1437a as of June 30 of the taxable year". There is no multiplier.
    • Act 160, Sec. 9 (PDF p. 11): "apply to taxable years beginning on and after January 1, 2021 (claim filing years 2022 and after)."
    • 2024 Vt. Acts No. 144 (H.546), Sec. 5 (PDF p. 3): "'Very low-income limit' means an amount of income 1.3 times the amount of the income limit for very low-income families".
    • Act 144, Sec. 21(c) (PDF p. 16): "Sec. 5 (renter credit expansion) shall take effect on passage and apply to claim years 2025 and after". Claim year 2025 is TY2024.
  • The PR's split is right. These laws confirm it, but they appear nowhere in the parameter or in Refactor SNAP emergency allotment to decompose accurately in the app #1678. Refactor SNAP emergency allotment to decompose accurately in the app #1678 quotes only the current § 6061(20).
  • Fix:
    • Add the two Act references to fifty_percent.yaml, and add the Act 160 reference to thirty_percent.yaml.
    • Add both to Refactor SNAP emergency allotment to decompose accurately in the app #1678, so that a HUD-derived encoding applies 1.3 only from TY2024.
    • Optionally, key the Python test's multiplier by year (1 before 2024, 1.3 from 2024) instead of the constant at test_vt_renter_credit_income_limits.py:24. The guard at line 99 (HUD_YEARS[:2] == [2024, 2025]) protects the test today, but it would fail rather than adapt if earlier HUD years were bundled.

4. Remove the stale "area median income" sentence and fix the § 6066 subsection in the titles.

  • Stale sentence. fifty_percent.yaml:12 and thirty_percent.yaml:12 still say "The legal code refers to area median income."
    • The lines the PR added directly below say the tables are HUD's extremely low-income and very low-income limits.
    • That is what § 6061(19)–(20) say: "the limit as determined by the U.S. Department of Housing and Urban Development pursuant to 42 U.S.C. § 1437a".
    • The sentence predates the PR, but it now contradicts the comment under it.
  • Wrong subsection. The titles at fifty_percent.yaml:17 and thirty_percent.yaml:16 cite "§6066 ... (b)(B)". The provisions are § 6066(b)(1)(B) and (b)(1)(A).
  • Folder name (optional). The income_limit_ami/{thirty,fifty}_percent names no longer describe the 2024+ partial limit (1.3 × HUD's 50% limit). Renaming is optional and larger in scope.

5. Point the 2023 calculator reference at the workbook, not the archived landing page.

  • Where: fifty_percent.yaml:26 and thirty_percent.yaml:25 link https://web.archive.org/web/20250526044955/https://tax.vermont.gov/document/2023-renter-credit-website-calculator.
    • That capture is an HTML landing page, titled "2023 Renter Credit Website Calculator | Department of Taxes".
    • It only links to /sites/tax/files/documents/2023%20Renter%20Credit%20Website%20Calculator_1.xlsx, which now returns 404 on tax.vermont.gov.
  • The workbook itself is archived at https://web.archive.org/web/20260103135348/https://tax.vermont.gov/sites/tax/files/documents/2023%20Renter%20Credit%20Website%20Calculator_1.xlsx. Its "2023 Income Limits" sheet has Franklin 7 = 58,320 and Lamoille 7 = 56,250.
  • Consistency. Guard county-keyed lookups in VT renter credit, MN CCAP, WI Shares and MD CCS #10116's new max_household_size.yaml already links the workbook path.
  • No value is left unsupported. Both 2023 corrections also appear in the TY2023 booklet (p. 36).
  • Fix: use the direct workbook capture in both files.

Verified correct

  • Statute (32 V.S.A. § 6061, current text):

    • (19): "'Extremely low-income limit' means the limit as determined by the U.S. Department of Housing and Urban Development pursuant to 42 U.S.C. § 1437a as of June 30 of the taxable year, provided that for claimants who reside in Franklin or Grand Isle county, 'extremely low-income limit' means the average of the extremely low-income limits for the State".
    • (20): "an amount of income 1.3 times the amount of the income limit for very low-income families ... provided that for claimants who reside in Franklin or Grand Isle County, 'very low-income limit' means 1.3 times the average of the very low-income limits for the State".
    • § 6066(b)(1)(A)–(C) (text): full credit at or below the extremely low-income limit, then a linear phase-out to zero at the very low-income limit.
  • Formula. vt_renter_credit.py is unchanged.

    • Its < / > tests give the full base at income equal to the extremely low-income limit, because (P − F)/(P − F) = 1. That matches "less than or equal to".
    • At income equal to the very low-income limit it gives 0.
  • Years.

    • The 2021–2023 cells equal HUD's l50 and ELI. The 2024–2025 partial cells equal 1.3 × l50, which matches Act 160 and Act 144 (Suggestion 3).
    • Each taxable year N uses HUD's FY N limits, which were in effect on June 30 of year N.
    • The corrected cells are all dated YYYY-01-01 in the year they belong to.
    • Backdating copies the 2021 values to 2015–2020, as the PR body discloses (Windsor 2020: $594 → $604). The pre-2021 renter rebate was a different program, so that backdating predates this PR and isn't changed by it.
  • The eight corrections against their sources:

    Cell Head HUD Department source
    2025 partial, Washington, 7 88,990 FY25 l50_7 = 68,450; × 1.3 = 88,985 2025 calculator, "2025 Income Limits" sheet: 88,990. The TY2025 booklet p. 37 prints "$88,880" (same row: "$83270")
    2024 partial, Chittenden, 8 102,050 FY24 Burlington MSA l50_8 = 78,500; × 1.3 2024 calculator; TY2024 booklet p. 36 "$102,050"
    2024 partial, Washington, 3 61,690 FY24 l50_3 = 47,450; × 1.3 = 61,685 2024 calculator; booklet p. 36 "$61,690"
    2024 full, Caledonia, 4 31,200 FY24 ELI_4 = 31,200 2024 calculator; booklet p. 36 "$31,200"
    2023 partial, Franklin, 7 58,320 FY23 12-area mean of l50_7 = 58,316.67 → 58,320 2023 calculator; TY2023 booklet p. 36 "$58,320"
    2023 partial, Lamoille, 7 56,250 FY23 l50_7 = 56,250 2023 calculator; booklet p. 36 "$56,250"
    2021 partial, Windsor, 2 31,550 FY21 l50_2 = 31,550 TY2021 booklet p. 34 "$31,550"
    2021 full, Chittenden, 5 31,050 FY21 Burlington ELI_5 = 31,050 TY2021 booklet p. 34 "$31,050"
  • The two typo comments are right.

    • 2025 partial, Washington, 7: HUD's FY25 4-person limit is 55,200. 1.24 × 55,200 = 68,448, which rounds up to 68,450. No multiple of $50 times 1.3 gives 88,880.
    • 2021 full, Washington, 7: the TY2021 booklet prints "$41,120". HUD's FY21 ELI_7 and every other county in that booklet row are 40,120.
  • Department rounding.

    • The rule is to round to the nearest $10, half up, with the Franklin/Grand Isle mean taken over the 12 HUD areas (11 nonmetro counties plus the Burlington–South Burlington MSA) and rounded before the multiplier.
    • It reproduces every calculator and booklet cell. One example where half-up matters: 2021 Franklin, 7 people, mean 49,975 → 49,980.
    • The statute itself doesn't round. For example, 1.3 × 68,450 = 88,985, not 88,990. The $5 gap moves a credit by at most $0.29 before rounding, and PE follows the amounts the department administers.
  • PE's bundled HUD table (gov/hud/income_limits/section8_income_limits.csv) matches HUD's FY2024 and FY2025 workbooks in all 448 Vermont ELI and VLI cells. That is the data the Python test compares against.

  • Hand checks: all nine new YAML cases, using vt_renter_credit.py's whole-dollar base and half-up rounding (from Match Vermont renter credit base amounts for Franklin and Grand Isle to the department's tables #10130). Each base amount equals the calculator's "Base Credit Amounts" sheet. Each case also differs under the old values:

    Case Base Calculation New Old
    Washington, 7, 2025, $68,820 2,372 20,170 / 40,340 × 2,372 1,186 1,183
    Washington, 7, 2025, $88,950 2,372 40 / 40,340 × 2,372 = 2.35 2 0
    Chittenden, 8, 2024, $102,400 2,500 income > 102,050 0 22
    Washington, 3, 2024, $61,800 2,198 income > 61,690 0 10
    Caledonia, 4, 2024, $30,600 1,988 income < 31,200, so full credit 1,988 1,950
    Franklin, 7, 2023, $51,870 1,904 6,450 / 12,900 × 1,904 952 770
    Lamoille, 7, 2023, $50,835 1,867 5,415 / 10,830 × 1,867 = 933.5 934 1,083
    Windsor, 2, 2021, $25,250 1,208 6,300 / 12,600 × 1,208 604 594
    Chittenden, 5, 2021, $31,045 2,500 income < 31,050, so full credit 2,500 2,499
  • PR-body figures I reproduced:

    • Washington, 7, 2025, $88,872: $0 → $7.
    • Subsidized Franklin, 7, 2023, $56,250 with $25,000 rent: (2,070 / 12,900) × 2,500 = 401.16, so $0 → $401.
    • "$83270" in the TY2025 booklet.
  • The Python test (test_vt_renter_credit_income_limits.py):

    • Exact check. It compares every 2024–2025 cell with HUD under the department's rule.
    • Invariants, every year: sizes rise, full stays below partial, every value is a multiple of $10, and Franklin equals Grand Isle. On the merge-base, the Franklin = Grand Isle check catches the 2023 swap.
    • 2021 coverage. The 2021 corrections fall outside the HUD years, so YAML cases 8 and 9 pin them.
  • CI collection. CI collects the file: 540 PASSED in "Python tests / Full Suite - Rest". That is 1 + 224 + 224 + 1 + 14 × 6 + 6, because TABLE_YEARS includes the backdated 2015.

  • References and pages:

    • Booklet anchors. Each one opens the table it cites:
      • 2021: p. 34 (both tables)
      • 2022: partial p. 35, full p. 36 (the PR's fix is right)
      • 2023 and 2024: p. 36 (both tables)
      • 2025: partial p. 37, full p. 38
    • Workbooks. The HUD workbooks and the 2024/2025 calculators are live at the cited URLs and contain the values.
    • Titles. No title carries page text.
  • Unit fix. currency-USD is right for a dollar limit.

  • Callers.

    • The tables are read only by vt_renter_credit.py.
    • vt_renter_credit feeds only the state_property_tax_credits lists, which don't reach household net income. That is why the PR body's microsimulation shows no change in net income or tax.
  • Changelog. changelog.d/fix-vt-renter-credit-income-limits.fixed.md is top-level, typed fixed, and accurate.

  • Local run. policyengine-core 3.26 can't import the head tree (_uprating_index_value is missing; CI uses a newer core), so I relied on CI plus the hand checks and the independent 1,120-cell recomputation.

Axiom line assessment

Valid queued.

  • The line: axiom: TheAxiomFoundation/rulespec-us#1678 queued.
  • The issue is OPEN and labelled pe-parity, created 2026-10-11 from Guard county-keyed lookups in VT renter credit, MN CCAP, WI Shares and MD CCS #10116. It has:
    • module paths: us-vt/statutes/32/6066/b.yaml, plus a policy module for the department's size convention
    • corpus citations: the axiom-corpus 2026-10-06-w6-income-tax-statute-vt rows for § 6061 and § 6066
    • blockers: the corpus pin must advance, and the billed encoder run needs approval
    • verbatim law: § 6066(b) and § 6061(7)(C), (19) and (20)
    • required outputs and companion tests
  • The Correct eight Vermont renter credit income limits to HUD's limits #10125 comment (2026-10-11 20:41 UTC) matches the merged behavior. It records:
    • the TY2025 booklet typo and the department's rounding rule
    • companion tests washington_seven_midpoint (1,186) and washington_seven_near_vli (2), the same as YAML cases 1–2
    • expected values from the department's 2025 calculator and HUD, not from PolicyEngine output
  • Design. The issue keeps the § 6061(19)–(20) limits as leaf inputs, so the corrected table values are input data, not encoded logic. That is reasonable for a data correction.
  • Two gaps to fix in the issue (Suggestions 1 and 3):
    • Output 7 says "TY2027" for Act 169, which applies to claim year 2027, i.e. TY2026.
    • The issue quotes only today's § 6061(20). A HUD-derived encoding needs Act 160 (no multiplier, TY2021–2023) and Act 144 §§ 5 and 21(c) (1.3 from TY2024).

CI status

All 26 checks pass (gh pr checks 10125, run 38398494152 on the merged head 62b935ee7f).

  • states-shard-1 ran vt_renter_credit.yaml (34 cases), vt_renter_credit_countable_tax_exempt_ss.yaml (2), vt_renter_credit_integration.yaml (2) and vt_renter_credit_in_aggregate.yaml.
  • The Rest job ran test_vt_renter_credit_income_limits.py (540 passed) and test_vt_renter_credit_amounts.py.
  • Partner tests. The PR touches none, and the Household API Partners job passes.

Branch status

Verdict: APPROVE

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.

2 participants