Add HUD utility allowance schedules for Texas and Kansas metro counties - #8984
Add HUD utility allowance schedules for Texas and Kansas metro counties#8984hua7450 wants to merge 4 commits into
Conversation
Encode Housing Choice Voucher utility allowance schedules for six Texas metro counties (Dallas 48113, Harris 48201, Tarrant 48439, Bexar 48029, Travis 48453, El Paso 48141) and four additional Kansas counties (Butler 20015, Douglas 20045, Harvey 20079, Riley 20161), plus a 2026 Wichita Housing Authority vintage covering Sedgwick, Butler, and Harvey. All values follow the existing Multi-Family, all-electric convention and were verified to the dollar against each originating PHA schedule. Adds per-county test cases and source references; no formula change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8984 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 1 1
Lines 18 24 +6
=========================================
+ Hits 18 24 +6
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…into hud-housing-data-check
Encode Waco Housing Authority's McLennan County multi-family schedule (Schedule MC3, effective 2025-10-01) as county 48309, following the all-electric summing convention. Update the Dallas partner tripwire case to reflect the new DHA schedule (15,600 -> 19,464) and re-pin the no-allowance boundary to Lubbock County, which no encoded PHA schedule covers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PavelMakarchuk
left a comment
There was a problem hiding this comment.
Program Review
PR 8984 — "Add HUD utility allowance schedules for Texas and Kansas metro counties" (hua7450).
Data-only extension of gov.hud.utility_allowance: 77 new CSV values across 12 county/vintage
blocks (7 TX counties, 4 new KS counties + a 2026 Wichita vintage), plus docstring/reference edits,
12 new YAML tests, and an edit to a partner contract test. No formula changed —
hud_utility_allowance already keys on county_fips.
Read this first: the two PDF-audit roles found zero value mismatches in every value they
could check, and Phase 5 external verification closed the remaining gap — all 77 new values now
reproduce exactly, to the dollar, from primary HUD-52667 schedules. Nothing below says the
arithmetic is wrong. Every Critical concerns which document was chosen, which row was included,
whether the citation still resolves, and one partner-facing governance gate — not transcription.
Source Documents
-
PDF (7 schedules collected in Phase 3, all page offsets 0, screenshots at 300 DPI):
- Dallas HA — Dallas 48113, "HCV 2026 Utility Allowances, APT/CONDO/TOWNHOUSE", eff. 1/1/2026 — 1 page (
pr8984-review-pdf-1.pdf); only schedule in the PR with a 7 BR column. - Tarrant County HAO — Tarrant 48439, "Multi-Family Homes", eff. 01/01/2026 — 2 pages (
pdf-2); p.2 is HUD boilerplate. - HA of Bexar County — Bexar 48029, "BEXAR COUNTY, TEXAS — MULTI FAMILY", eff. 01/01/2026 — 1 page (
pdf-3). - LDCHA board packet — Douglas 20045, 09/23/2024 agenda packet containing the Nelrod schedules — 387 pages (
pdf-4, pp. 48–71 rendered); table at PDF p.51. - El Paso County HA — El Paso 48141, "20206 UA Sheets", Apartment (form Date field blank) — 3 pages (
pdf-5); water/sewer/trash provider table on p.3. - Manhattan HA — Riley 20161, "Section 8 Sites 2024, Large Apartment (5+ units)", 11-20-2024 — 5 pages (
pdf-6). - Manhattan HA water/sewer attachment — Riley 20161, report date 11-20-2024 — 1 page (
pdf-7).
NOT COLLECTED in Phase 3 (both later obtained in Phase 5):
- Wichita HA 2026 (backs Sedgwick 20173 + Butler 20015 + Harvey 20079 = 21 values) — the cited
wichita.gov/DocumentCenter/View/37084/...returned HTTP 403 behind a site-wide Cloudflare block
on every automated route (curl with browser UA/Referer/cookie jar, Googlebot UA, WebFetch, r.jina.ai);
archive.orghad no snapshot. Phase 5 (ext-1) retrieved it two ways — via the Granicus/Legistar
council attachment (.../download/pdf/3962881/2026_Proposed_Utility_Allowances_-_REVISED.pdf) and via
the cited URL itself in a real browser. 2 pages. - HACA / Austin (backs Travis 48453 = 6 values) — the cited
hacanet.orgURL is dead (invalid TLS
CN after the rebrand to austinha.org; origin 403; the same path on austinha.org 404s). Phase 5 (ext-2)
retrieved it from the Internet Archive — snapshot20250408045007, 7 pages, digest-identical to a
second capture at20250315212108. - El Paso Water Utilities PSB — the PR body credits it in prose; no URL exists anywhere in
policyengine_us/. Not needed: the EPWU/PSB figures are a row of the EPCHA schedule itself (p.3).
- Dallas HA — Dallas 48113, "HCV 2026 Utility Allowances, APT/CONDO/TOWNHOUSE", eff. 1/1/2026 — 1 page (
-
Year: 2024 (Riley), 2025 (Douglas, Travis, Harris, McLennan), 2026 (Butler, Harvey, Sedgwick new
vintage, Dallas, El Paso, Tarrant, Bexar). -
Scope: PR changes only (6 changed files).
-
Reviewed head SHA:
4526bedcc0cfae99298a2573c88b5bf5902440f3 -
Mode: full
Row-count discrepancy resolved: the regulatory role's prose says "62 new rows"; the references role,
the context file, and the test-coverage role say 77. 77 is correct — the regulatory role's own
per-county table sums to 77 (8+6+6+6+6+6+6+7+7+7+6+6). All ratios below use 77.
Branch Status
BEHIND = 886, AHEAD = 4. The branch was opened 2026-07-09 and is extremely stale — 886 commits
behind main against 4 of its own. A rebase onto upstream/main is strongly recommended before merge.
This is informational, not a finding. Staleness did not affect any conclusion in this report: every
value was verified against primary source documents rather than against sibling repo state, all 36 CI
checks pass on the current head, and the review read the PR snapshot at the head SHA above. Two
staleness-adjacent facts worth noting when rebasing: HACA rebranded and published a June-2026 schedule
after this branch was cut (see C4), and LDCHA has since posted a 2026 vintage — so a re-pull of the
whole source set at rebase time is worth the effort (see S11).
Critical (Must Fix)
C1 — PARTNER CONTRACT TEST: an expected output changed, which is a partner-facing API change
policyengine_us/tests/policy/baseline/partners/analytics_coverage/edge_cases/federal/housing/housing_assistance/federal.yaml:562
(renamed case) and :615 (new case).
This PR edits a file under tests/policy/baseline/partners/**. Per this repo's CLAUDE.md, these are
API partner contract tests, not ordinary snapshots — a changed expected output must be treated as a
possible partner-facing API change, not as a snapshot refresh. Two edits:
housing_assistance_tx_tenant_pays_utilities_no_allowance→ renamed
..._dallas_allowance, expected value 15,600 → 19,464 (Dallas 48113, 2 BR,tenant_pays_utilities: true).- A new
housing_assistance_tx_tenant_pays_utilities_no_allowancecase added for Lubbock 48303
at 6,000 (:615, comment:657-667).
What the review can confirm. The change is mechanically correct and well-motivated:
- Arithmetic verified independently by three roles: 21,600 + (322 × 12 = 3,864) = 25,464 gross rent;
TTP = max(10% × 20,000; 30% × 20,000; 25) = 6,000; 25,464 − 6,000 = 19,464, with the
payment-standard side (34,800 − 6,000 = 28,800) not binding. The delta from 15,600 is exactly 3,864
— the new allowance and nothing else. - Contract shape is preserved. A recursive key-path comparison of the renamed and new cases returns an
empty symmetric difference: identical top-level key set across all 12 cases before and after, same
entity blocks, same single asserted outputspm_units.spm_unit.housing_assistance, same
absolute_error_margin: 0.1. No output variable added, removed, or moved entity level. Case count 11 → 12. - The Lubbock control is genuine and load-bearing. 48303 appears zero times in
county_utility_allowances.csv; ZIP 79401 appears zero times inzip_code_payment_standards.csvand
zero times insmall_area_fair_market_rents.csv; the county FMR fallback matches exactly
(fair_market_rents.csv:TX,4830399999,2026,2,1175.0→ 14,100). The case fails for any non-zero
allowance A, so it re-pins the uncovered-county boundary as intended. - Blast radius is exactly two cases. 11 of 12 cases use
county_fips: '48113', but only the two edited
ones settenant_pays_utilities: true(:584,:637), andhud_utility_allowanceis
defined_for = "tenant_pays_utilities"— the other nine Dallas cases are structurally immune.
What the review cannot determine, and what the maintainer must consciously accept. This review has no
visibility into whether the API partner was notified, and it makes no claim either way. Partner-visible
effect: households in the newly covered counties with tenant_pays_utilities will see
housing_assistance increase (hud_gross_rent is adds = ["pre_subsidy_rent", "hud_utility_allowance"],
so the direction is unambiguous), and this specific case moves +24.8%. Before merging, run the
three-question gate from CLAUDE.md with the user: (1) is the edit to this file intended, (2) has a team
member been notified, (3) has the API partner been notified. No subagent in this review edited or should
edit this file.
Note also A11 below: the freed name ..._no_allowance is immediately re-used by a different
household, so a partner keyed on case name sees that name's value move 15,600 → 6,000 with silently
different inputs — a larger apparent delta than the real model change.
C2 — Harris County: an unlabeled flat $23 charge is included, against the PR's own fuel-typed convention; every Harris value is likely overstated by exactly $23/month
parameters/gov/hud/utility_allowance/county_utility_allowances.csv:282-287 (48201,2025,0-5 =
200/217/299/378/452/524); variables/gov/hud/hud_utility_allowance.py:46-48;
pinned test tests/policy/baseline/gov/hud/hud_utility_allowance.yaml:266.
Verified externally (ext-3 — CONFIRMED). The HCHA 2025 chart's values are drawn as a content overlay,
so pdftotext returns a blank template; the row was read off a 300-DPI render. It prints exactly:
Utility or Service = "Other – specify", specify cell blank, $23.00 flat across 0–5 BR. The document
itself does not say whether it is electric or gas, and nothing else on the page resolves it.
The PR's own convention is explicitly fuel-typed — parameters/gov/hud/utility_allowance/__init__.py
and the PR body both say "Gas rows, gas service charges, and electric heat-pump rows are excluded",
and a flat electric service charge is included. The PR honours that rule everywhere the label exists:
| County | "Other" row label | value | PR treatment | repo values reproduce? |
|---|---|---|---|---|
| Tarrant 48439 | Atmos CC-23 (gas) |
$23 | excluded | MATCH |
| McLennan 48309 | ATMOS CC-23 (gas) |
$23 | excluded | MATCH |
| Bexar 48029 | Other-Gas |
$10 | excluded | MATCH |
| Bexar 48029 | Other-Electric |
$10 | included | MATCH |
| Harris 48201 | Other – specify — BLANK |
$23 | INCLUDED | MATCH |
It is not literally the Atmos charge — Atmos does not distribute gas in Harris County (CenterPoint
Entex does), and the Tarrant/McLennan cells hold the text "ATMOS CC-23", not a dollar figure. The
regulatory role's literal framing was wrong on that point. But three independent lines put it in the gas
cluster:
- Houston HA — the other PHA in the same county — splits the identical form slot into a labelled
Other - Monthly **Electric** Fee= $15 and a labelledOther - Monthly **Gas** Fee= $24.
HCHA's unlabeled $23 sits within $1 of the gas fee and $8 above the electric fee. - CenterPoint's Houston-division residential gas fixed charge was ~$22.38 in 2025; the Houston
electric TDU residential customer charge is ~$4.39. - Every flat charge the PR knowingly included as electric is $10–$15 (Johnson $14, Manhattan $15,
Topeka $14, El Paso $12, Bexar $10). Every one it knowingly excluded as gas is $10 or ~$23–$24.
Quantified. Removing it drops every Harris value by exactly 23 → 177 / 194 / 276 / 355 / 429 / 501
(−11.5% at 0 BR falling to −4.4% at 5 BR), i.e. $276/yr of hud_utility_allowance per affected
household flowing straight into housing_assistance. The pinned test at
hud_utility_allowance.yaml:266 would move from 299 * 12 to 276 * 12.
Ask: confirm with HCHA what the row is. If gas — which the evidence favours — exclude it for
consistency with Tarrant, McLennan and Bexar and update the pinned test. If electric, say so in a code
comment, because no reader can derive it from the cited document. Harris is the only county in this PR
where an unlabeled row was classified by assumption, and the PR body does not mention the row at all.
C3 — The PR's stated "dominant PHA per county" rule is violated in 4 of 7 Texas counties
county_utility_allowances.csv:282-287 (Harris), :288-293 (Bexar), :270-275 (Tarrant), :264-269
(El Paso); variables/gov/hud/hud_utility_allowance.py:38-48.
Verified externally (ext-3 — CONFIRMED) against two independent primary HUD sources that agree to
within ~1%: HUD Picture of Subsidized Households, 2025 data year (PHA_2025_2020census.xlsx +
COUNTY_2025_2020census.xlsx, snapshot 31DEC2025) and the HUD PIH Public Housing Authorities feature
layer (SECTION8_UNITS_CNT, last updated 2026-07-06). HCV only (Picture program 3).
| County (FIPS) | County HCV total | Largest PHA | share | PHA the PR used | share | Rule honoured? |
|---|---|---|---|---|---|---|
| Dallas 48113 | 21,596 | DHA (TX009) — 20,346 | 94.2% | DHA (same) | 94.2% | YES |
| Travis 48453 | 7,164 | HACA/Austin (TX001) — 7,047 | 98.4% | HACA (same) | 98.4% | YES |
| McLennan 48309 | 2,769 | Waco HA (TX010) | only HCV PHA | Waco HA (same) | — | YES |
| Harris 48201 | 24,638 | Houston HA (TX005) — 19,236 | 78.1% | Harris County HA (TX441) — 4,913 | 19.9% | NO (#2, ~4× smaller) |
| Bexar 48029 | 16,698 | Opportunity Home San Antonio (TX006) — 14,403 | 86.3% | Bexar County HA (TX452) — 2,284 | 13.7% | NO (#2, ~6× smaller) |
| Tarrant 48439 | 15,272 | Fort Worth Housing Solutions (TX004) — 6,430 | 42.1% | Tarrant County HAO (TX431) — 3,308 | 21.7% | NO (#3, behind Fort Worth and Arlington's 3,905) |
| El Paso 48141 | 6,969 | HACEP / City of El Paso (TX003) — 6,245 | 89.6% | El Paso County HA (TX432) — 266 | 3.8% | NO (smallest of three, 23× smaller) |
Cross-county consistency conclusion: the rule is not uniformly wrong — it is inconsistently applied,
which is the harder problem to justify. Dallas, Travis and McLennan are correct. The four failures share
a visible signature: the PR selected the PHA whose name matches the county, which picks the
suburban/unincorporated-area administrator rather than the central-city PHA holding most of the county's
vouchers. El Paso is the worst case and is exactly computable — 6,245 + 458 + 266 = 6,969 = the county
total exactly, so El Paso County HA's 3.8% share is exact, not an estimate.
Honest magnitude for Harris. Collapsing Houston HA's own 2026 apartment schedule under the PR's
convention gives 224/243/311/378/443/511 vs the repo's 200/217/299/378/452/524 — +24 to −13 $/month,
≤12%, exactly equal at 3 BR. So the rule violation is severe but the dollar consequence in Harris is
modest, and of the opposite sign to C2. Two caveats keep this from being a clean substitution test: the
vintages differ (HCHA 04/2025 vs Houston HA 01/2026), and Houston HA is an MTW agency, so its schedule
is not automatically the right one to encode either. Methodology bound: HUD publishes no PHA × county
crosstab, so shares are approximate outside El Paso — but the ordering is not in doubt at these margins.
Ask (either is acceptable; the present state is not): (a) re-source Harris, Bexar, Tarrant and El Paso
from the genuinely dominant PHA — El Paso should be revisited regardless at 3.8% — or (b) restate
the rule in the PR body, the variable docstring and parameters/gov/hud/utility_allowance/__init__.py to
what was actually done (e.g. "the county-wide PHA where one exists"), name the counties where the encoded
PHA is not the largest, and state the resulting limitation that a Houston or San Antonio voucher household
receives the county authority's allowance. What is not acceptable is a "dominant PHA" claim the data
contradicts. Citation: 24 CFR 982.517(a)(1), (b)(1); Tex. Loc. Gov't Code § 392.011.
C4 — Travis: the cited HACA URL is dead; the values are correct, the citation is not
variables/gov/hud/hud_utility_allowance.py (HACA reference);
county_utility_allowances.csv:276-281 (48453,2025,0-5 = 256/269/316/366/413/469).
https://www.hacanet.org/wp-content/uploads/2025/03/Utility-Allowance-Schedule-06-01-2025.pdf fails at
three layers: hacanet.org serves a certificate whose CN does not match (the authority rebranded to
Austin Housing Authority / austinha.org), the origin returns 403, and the equivalent austinha.org path
returns 404. The 2025 asset was not migrated — an exhaustive sweep of austinha.org's WordPress
media library (/wp-json/wp/v2/media searches for "UA", "allowance", "schedule", plus site search and a
CDX domain sweep) found every asset dated 2026-05 or later and exactly one UA document. There is no
live 2025 HACA schedule on either domain.
Verified externally (ext-2 — CONFIRMED). The Internet Archive does hold it — the Phase 3 manifest's
"no wayback snapshot" line was wrong (the collector most likely probed the dead live origin, whose TLS
fails before any request is sent). The CDX API returns two exact-match captures with the same content
digest UHIOM2HQSG76Y3PZ6WUMNKEKSEL7IS5D: 20250315212108 and 20250408045007. Downloaded (7 pages),
document identity confirmed verbatim — Locality/PHA "Housing Authority of the City of Austin, TX", Unit
Type "Multi-Family -(Elevator)", Date 06/01/2025 — matching the code comment and the CSV year.
All 6 Travis values MATCH exactly. (p.1 Elevator and p.2 Apartment are numerically identical, so that
label choice is immaterial; p.7 "Energy Efficient" is different and would give 236 at 0 BR, so the PR
picked the right page.)
Exact replacement URL — use this one:
https://web.archive.org/web/20250408045007/https://www.hacanet.org/wp-content/uploads/2025/03/Utility-Allowance-Schedule-06-01-2025.pdf
Correct vintage: 2025, effective 06/01/2025 — exactly the 48453,2025,* rows.
(.../web/20250315212108/... is an equivalent alternate, same digest.)
Do NOT cite the live successor against the 2025 rows.
https://austinha.org/wp-content/uploads/2026/07/2026-June-UA-Schedules.pdf exists (200,
application/pdf, 335 KB, uploaded 2026-07-17) but is a Date 06-01-2026 schedule whose numbers differ
throughout; under the same convention it yields 265 / 279 / 325 / 375 / 424 / 479 — none of which
equals a repo 2025 row. Citing it next to the 2025 values would put a URL beside numbers it does not
contain. Those 2026 totals are what a future 48453,2026,* block would hold if someone re-vintages Travis
(see S11) — informational, not a request to change this PR.
Should Address
A1 — The Wichita jurisdiction claim (14 of 21 KS rows) lives only in a code comment, with no citation; the Newton carve-out is unmodelable.
variables/gov/hud/hud_utility_allowance.py:57-60 asserts "Sedgwick and Butler Counties; Harvey County
except the City of Newton". The cited schedule PDF contains zero county names — grepping the extracted
text for "Butler", "Harvey", "Newton", "Sedgwick", "county" returns nothing; the only locality string is
"Wichita Housing Authority, KS". ext-1 CONFIRMED the claim is TRUE against the PHA's own HCV page
(https://www.wichita.gov/428/Housing-Choice-Voucher-Formerly-Section-, archived
web.archive.org/web/20260714150659/...), which states verbatim: "Currently, WHA serves Sedgwick, Harvey
(With the exception of the City of Newton), and Butler Counties" — word for word what the comment says,
Newton exclusion included. Corroborated by the KS004 PHA profile. Fix: add that URL as a second
reference so the Butler/Harvey attribution is citable from the repo. Separately, the CSV keys on
county_fips alone, so every Harvey County household — Newton included — receives the WHA schedule;
the comment documents a limitation the data structure silently violates. Record it as a known limitation
of county-FIPS keying in parameters/gov/hud/utility_allowance/__init__.py.
A2 — The Wichita citation is unreachable to every automated client and has no archival copy.
hud_utility_allowance.py:59 cites wichita.gov/DocumentCenter/View/37084/2026-Utility-Allowances-PDF,
which backs 21 of 77 rows (27%). It returns HTTP 403 behind a site-wide Cloudflare block to curl,
WebFetch, Googlebot UA and proxies alike, and archive.org holds no snapshot. The document is real and
opens fine in a human browser — this is not a dead link like C4 — but no CI job or future maintainer can
verify those rows without a manual browser session. Fix: submit the URL to Wayback "Save Page Now" at
merge time, and/or add the unprotected council mirror
https://wichitaks.granicus.com/services/legistar/download/pdf/3962881/2026_Proposed_Utility_Allowances_-_REVISED.pdf
as a companion reference.
Resolved by ext-1, not a finding: the regulatory role reported the document is titled "2026 Proposed
Utility Allowances - REVISED" and flagged 21 rows as resting on a proposed schedule. It is the ADOPTED
schedule. Agenda Report II-26 recommends "Approve the updated Utility Allowance Schedules to be effective
July 1, 2026"; the minutes for clip 4768 record it adopted 7–0 on 2026-03-24 in the consent agenda
(only item 14 was pulled); and the file the cited URL serves was created 2026-03-26, two days after
the vote, with HTTP download name "7.1.26 Utility Allowances.pdf". "Proposed" survives only in the stale
internal PDF /Title. No finding against the PR on adoption status.
A3 — Douglas: replace the 387-page board packet with LDCHA's standalone adopted schedule, and name the Lawrence locality.
hud_utility_allowance.py:69-72; county_utility_allowances.csv:35-40.
The current citation is a 387-page, 16.4 MB board agenda packet on a site-builder Google Storage bucket,
with the table at PDF p.51 and no #page= anchor — a reader who clicks it lands on a table of
contents. ext-4 CONFIRMED a strictly better official source exists, linked from
https://ldcha.org/utilities-allowances under "Housing Choice Voucher Utility Allowance / For 2025":
https://storage.googleapis.com/wzukusers/user-31752601/documents/a22c3c2c35f84487aecfaef88a2f5a5e/2025%20Utility%20Allowance.pdf
17 pages, 2.8 MB, the audited table is page 1, and unlike the packet copy it carries a printed
Date 01/01/2025 and a "Resolution 2024-18" stamp on every page — i.e. the adopted schedule.
All 6/6 Douglas values re-verified against it (a third independent confirmation). This retires the
"proposed, not adopted" leg of the references role's C4 outright.
Prioritized fix: (a) preferred — cite the standalone URL above with a comment naming
"p.1, Lawrence locality, High-Rise/Apartment, Resolution 2024-18, eff. 2025-01-01"; (b) companion —
also cite https://ldcha.org/utilities-allowances as the durable pointer, since the bucket path is
re-keyable (objects are documents/<opaque-GUID>/<filename> minted per upload; the site's own "For 2025"
public-housing button already points at an object named ...2024.pdf uploaded 2023-11-07); (c) fallback
only if the packet is kept — at minimum append #page=51. Note the host stability problem is not
fixed by the swap (same bucket, and Wayback has no snapshot of either PDF) — that is what (b) and a Save
Page Now are for. The Lawrence sub-locality pick is correct and uniquely determined by the data
(Baldwin/Eudora/LeCompton reproduce nothing; Baldwin gives 355 at 2 BR vs Lawrence's 320) and Lawrence is
~85% of the county — it is simply documented nowhere: the code names the unit type but never the
locality, and "baldwin"/"eudora"/"lecompton" appear nowhere in policyengine_us/. Same for the choice of
City of Lawrence water/sewer/trash rows over the schedule's rural-water-district table.
A4 — El Paso and Waco citations will silently stop corroborating their rows; the El Paso provider pick is undocumented.
hud_utility_allowance.py:38-39; county_utility_allowances.csv:264-269, :226.
epcha.org/hcv-utility-allowancesis a landing page holding no table; it links a GoDaddy blob at
img1.wsimg.com/blobby/go/<GUID>/downloads/<GUID>/20206%20UA%20Sheets.pdf?ver=1787602969888. When EPCHA
posts 2027 sheets the target changes and the citation quietly stops matching. The underlying form's Date
field is blank — the 2026 vintage is inferred only from the footer "The Nelrod Company 1/2026 Update".- The reference does not say which of 8 water/sewer/trash providers was used. p.3 lists Town of
Anthony, EPC Tornillo WID, EPC WCID #4, El Paso Water Utilities PSB, Horizon Regional MUD, Lower
Valley Water District, Paseo Del Este MUD No. 1, Southwest Disposal, Waste Connections. Only EPWU/PSB
reproduces the CSV (2 BR: 131 + 16 + 30 + 37 = 214 ✓); Town of Anthony gives 247. A reader following the
citation finds eight candidate answers and no instruction. EPWU/PSB is also the cheapest of the eight
at every bedroom size, and it is the City of El Paso's utility while EPCHA's jurisdiction is the county
outside the city — so the encoded value mixes two geographies. (No separate epwater.org URL is needed:
the figures are a row of the EPCHA schedule itself.) wacopha.org/page/open/2202/0/mclennan%20MF.pdfis a CMS node path carrying no vintage; when Waco HA
publishes its 2026 MC3 schedule this URL will almost certainly serve it and then contradict the
48309,2025,*rows.
Fix: name the EPWU/PSB selection and the blank-Date vintage basis in the comment, and capture Wayback
snapshots of the El Paso blob and the Waco path at merge time, cited alongside the live URLs.
A5 — Riley: cite the two documents, not the page that lists them.
hud_utility_allowance.py:65. mhaks.com/212/Utility-Allowances holds no table. Both underlying files
have clean, stable, official URLs: https://www.mhaks.com/DocumentCenter/View/273/ (Large Apartment (5+
units), KS063, 11-20-2024) and https://www.mhaks.com/DocumentCenter/View/275/ (water/sewer attachment,
same report date). The comment already promises "with its water/sewer attachment", so only the href is
wrong. The same landing page also offers a "Energy Efficient Utility Allowance 2024/2025" variant
(/DocumentCenter/View/272/); the PR used the standard schedule and the code should say so.
Manifest correction (documentation only): the Riley Trash Collection $35 row is on
pr8984-review-pdf-6.pdf p.1, not on the water/sewer attachment as the manifest states. Arithmetic
unaffected.
A6 — Test coverage: 12 of 77 new values are pinned (15.6%), and all 12 are 2-bedroom.
tests/policy/baseline/gov/hud/hud_utility_allowance.yaml:222-353. Every new case is bd2 — bd0, bd1, bd3,
bd4, bd5, bd6 and bd7 are 0% covered. All 12 expected values were independently re-derived and are
correct, but a transcription error in any other column ships silently, and these are hand-keyed-from-PDF
values. Highest-risk gaps: Dallas bd3–bd7 (457/609/759/898/1064) — the steepest schedule in the file,
bd7 = 1064 is the largest value in the CSV and is also the county's largest, so MAX_BEDROOMS = 8
clipping reuses it for every larger unit; and bd0 for all 12, which is load-bearing twice because the
SRO fallback scales it (0.75 × bd0). Three further structural gaps:
- Vintage columns are unfalsifiable. 11 of the 12 new groups are single-vintage, and
_effective_year_by_countyfalls back to a county's earliest year — so theiryearvalue could be
mistyped and every test would still pass. Only Sedgwick's 2026 is genuinely pinned (274 over the 2025
row's 266). Add carry-forward cases (Travis/Harris/McLennan/Douglas @2026) and a Sedgwick @2025 → 266 twin. - No pre-vintage case for any new county (e.g. Dallas @2025 → 322, Riley @2023 → 316), even though seven
of the twelve are 2026-only and the model is routinely run for 2024/2025 households. - SRO / 24 CFR 982.604(b) is untested for all 12. None publishes a
bedrooms = -1row, so all take the
sro_uses_zero_bedroom_sharepath; the only SRO fallback case in the repo now sits on the superseded
Sedgwick 2025 vintage. Cheap adds: Dallas @2026is_sro: true→ 163.5 × 12; Bexar → 104.25 × 12.
A first/middle/last triple per county (~24 cases) takes coverage from 15.6% to ~44%.
A7 — Count wording is inconsistent, and federal.yaml:660 is the outlier.
Three roles independently derived the true counts from the CSV: seven new TX metro counties/PHAs
(Dallas, El Paso, Tarrant, Travis, Harris, Bexar, McLennan). So hud_utility_allowance.py:17 ("seven Texas
metro PHAs") and changelog.d/hud-metro-utility-allowances.added.md are correct; the partner test
comment at
tests/policy/baseline/partners/analytics_coverage/edge_cases/federal/housing/housing_assistance/federal.yaml:660
says "the six Texas metro PHAs" and is wrong — comment-only, no expected value involved. (It sits
in the partner file, so it still falls under the C1 gate even as a comment fix.) Separately, the Kansas
wording mixes units: utility_allowance/__init__.py:6-7 and hud_utility_allowance.py:18 say "six Kansas
PHA jurisdictions" (true as a PHA count: Johnson County HA, Wichita HA, Topeka HA, KCKHA, Manhattan HA,
LDCHA) inside a sentence enumerating counties, of which there are now eight, while the changelog
says "four Kansas counties". Suggest "eight Kansas counties across six PHA jurisdictions".
A8 — The selection rules that make the citations legitimate exist only in the PR body; there is no URL → row mapping.
77 data rows, 16 reference URLs, and an implicit, lossy mapping between them: county is inferable but never
stated for most entries ("Dallas Housing Authority" does not say 48113); the CSV year is never tied to a
comment's effective date; and the decisive selections — El Paso's water provider (A4), Douglas's locality
(A3), Riley's standard-vs-energy-efficient variant (A5), the Wichita jurisdiction (A1), and every county's
unit type — are lost entirely. The new URLs are also interleaved with pre-existing ones in geographic
order, so a reader cannot tell which ten are new. Cheapest fix: add a source column to
county_utility_allowances.csv (one key per row, e.g. dha_2026_apt, wha_2026,
ldcha_2025_lawrence_highrise) plus a key → URL table in the __init__.py docstring —
utility_allowance_schedule() rebuilds its frame from explicitly named columns, so an extra column is
inert for the formula and the validate="many_to_one" merge. Failing that, restructure each comment to
state county_fips + CSV year + unit type + any provider/locality selection. The "dominant PHA per county"
rule itself (C3) belongs in the __init__.py docstring beside the all-electric/Multi-Family convention.
A9 — The allowance → housing_assistance chain for the new counties is pinned only inside the partner contract file.
tests/policy/baseline/gov/hud/integration.yaml exercises the chain end-to-end, but only for LA County
(06037 @2023) and Denton (48121 @2026) — and this PR does not touch it. That is backwards relative to the
repo's own rules: partner contract tests are protected artifacts, so making one the sole home of a
behaviour means every legitimate future Dallas schedule refresh triggers a partner escalation instead of a
normal test update. Mirror it: add a Dallas @2026 case (48113, bd2, tenant_pays_utilities: true) to
integration.yaml asserting hud_utility_allowance: 322 * 12 alongside the resulting
housing_assistance, plus the tenant_pays_utilities: false twin showing the 3,864 delta.
A10 — CSV sort order is broken for 10 of the 12 new county/vintage groups.
county_utility_allowances.csv — the file's convention is ascending county_fips, then year, then
bedrooms. Violations: :28 20015, :35 20045, :41 20079 inserted after 20091; :76 20161 after
20209; and :256 48113, :264 48141, :270 48439, :276 48453, :282 48201, :288 48029 appended
after 48493 and unsorted among themselves. Correctly placed: :55 20173/2026 and :226 48309/2025.
Zero functional impact — the lookup is a pandas merge — but it makes it easy for a future contributor
to miss an existing county and add a duplicate group. Maintainability only.
A11 — The partner test's ..._no_allowance name is re-pointed at a different household, not freed.
federal.yaml:562 (renamed away) and :615 (name re-used). The old name now describes a different
household (Lubbock 48303 / ZIP 79401 instead of Dallas 48113 / ZIP 75201) with a different expected value
(6,000 instead of 15,600). A partner keyed on case name sees that key move 15,600 → 6,000 with silently
different inputs — a larger apparent delta than the real model change. Naming the new case
..._lubbock_no_allowance would make the diff read as one rename plus one addition. Structural
observation; the notification decision is C1's.
A12 — 24 CFR 982.517(d) ("lesser of unit size leased or family unit size") is not implemented, and this PR is the first to reach 6–7 bedrooms.
hud_utility_allowance.py:73-92; variables/household/demographic/housing/bedrooms.py. The formula keys
purely on the bedrooms household input — a bare int with no formula and no link to household size or
voucher size — so the family-unit-size cap never applies. Pre-existing, not introduced here, but this
PR is the first to encode bd6 and bd7 (Dallas $898 and $1,064/month, county_utility_allowances.csv:262-263),
where the uncapped gap is largest: a one-person Dallas household entered with bedrooms: 7 receives
$12,768/year where the regulation would allow roughly $2,856. Worth an issue even though it is out of scope
for this PR.
A13 — Year-vintage back-projection now spans four vintages within a single simulation year.
utility_allowance/__init__.py _effective_year_by_county takes the latest vintage at or before the
target year and, for years before a county's earliest vintage, falls back to that earliest vintage. So a
2023 run gives Dallas its 2026 allowance ($322/mo at 2 BR) while LA County correctly gets its 2023
one. The mechanism is pre-existing and already covered by a generic test
(hud_utility_allowance.yaml:199), but this PR materially widens the spread: seven of the twelve new
county/vintage combinations are 2026-vintage and will be back-projected onto every earlier simulation year,
and the file now mixes 2023/2024/2025/2026 vintages across counties in one run. Under 982.517(c)(1)
schedules revise on a 10%-change trigger, so this is not a small error where rates moved (Sedgwick's own
2025→2026 step is +3.8% to +4.6%). At minimum document the behaviour in the module docstring; better,
decline to resolve years before a county's earliest vintage.
Suggestions
S1 — Add #page=NN (file page, not printed page) to every multi-page PDF citation. Required for the
LDCHA packet if it is kept (#page=51; the Nelrod study's internal p.11 == PDF p.51, offset +40); helpful
for El Paso (grid p.1, provider table p.3) and Riley (large apartment p.1 of 5). The PR currently adds
zero page anchors — all 10 new URLs are bare.
S2 — Test case names should state the bedroom count and the test year, matching every pre-existing name
in the file ("… 2026 zero bedroom", "… 2025 seven bedroom"). This is precisely what let the all-2-bedroom
uniformity in A6 pass unnoticed. Relatedly, the Riley case name says "uses Manhattan HA's 2024 … schedule"
but runs at period: 2025 — correct and deliberate carry-forward, but the name reads as a mismatch; e.g.
"Riley County, KS in 2025 carries forward Manhattan HA's 2024 two-bedroom schedule".
S3 — Excluding electric heat-pump rows is consistent but systematically upward. Tarrant, Bexar,
McLennan, Riley and Wichita all publish a heat-pump heating row below the electric-resistance row (Tarrant
2 BR: 14 vs 19; Riley 0 BR: 20 vs 22; Wichita 2 BR: 25 vs 32). The __init__.py docstring presents the
exclusion as a mechanical rule rather than a modeling choice with a known direction. One sentence naming
the bias would be honest.
S4 — Unit-type selection is more consistent than the differing labels suggest — every county uses the
multifamily/apartment form, and where a PHA splits it the 5-or-more-unit variant is used. The one real
deviation is Dallas, whose only apartment form is "APT / CONDO / TOWNHOUSE" and therefore bundles
higher-consumption townhouses. DHA publishes nothing narrower, so it is unavoidable — it should just be
named as the exception in the docstring.
S5 — The new Lubbock tripwire saturates at a $175/month allowance. With a future Lubbock allowance A
the subsidy is min(6,000 + A, 8,100) — only $2,100/yr = $175/mo of payment-standard headroom, and every
county in this CSV has a 2 BR allowance above that (lowest: Bexar, $186). A realistic future Lubbock
schedule would hit the cap and the guard would stop tracking the allowance, silently under-reporting the
change it exists to catch. Raising pre_subsidy_rent (or lowering income) restores headroom. (Touches the
partner file — C1 gate applies.)
S6 — Microsimulation impact is probably zero; the change is calculator/API-facing.
tenant_pays_utilities is a bare bool Household input with no formula, so it defaults to False
unless the dataset populates it. Worth confirming and stating in the PR body, since the changelog implies
broader reach. Per-household magnitude where it does apply (2 BR, annualized, rent side binding): Dallas
+$3,864, Douglas +$3,840, Travis/Riley +$3,792, Harris +$3,588, Sedgwick/Butler/Harvey +$3,288, McLennan
+$2,880, El Paso +$2,568, Tarrant +$2,520, Bexar +$2,232.
S7 — Add a structural-invariant test over the CSV. 77 hand-transcribed rows landed with nothing
asserting the file's own invariants, all of which hold today: (county_fips, year, bedrooms) unique
(runtime validate="many_to_one" only catches duplicates in the selected vintage — a duplicate in a
superseded vintage would never raise); bedrooms contiguous from 0 per county/vintage; monthly_value
strictly increasing and positive; county_fips 5 characters. The interior-gap case is the one that
matters: by_bedroom.get(n, by_bedroom[largest]) silently substitutes the top value for a missing
interior row, so a dropped Dallas bd4 row would hand a 4-bedroom household 1064 instead of 609 — and a
bd2-only test suite cannot see it.
S8 — Archive the volatile sources (Wayback Save Page Now or perma.cc) for the El Paso ?ver= blob, the
Waco CMS path, the LDCHA Google Storage objects and — most urgently — the Wichita 2026 PDF, which has no
snapshot at all today.
S9 — Note that mid-year effective dates are collapsed to the calendar year. Riley is effective
2024-11-20 → coded 2024; HACA 2025-06-01, HCHA 2025-04-01, Waco 2025-10-01 → coded 2025; and the
Wichita 2026 schedule is effective 2026-07-01 yet applies to all of 2026, so Jan–Jun 2026 resolves to
it rather than to the 2025-07-01 schedule legally in force. This is consistent with the pre-existing LACDA
(7-1) rows and unavoidable for a definition_period = YEAR variable, but the year column's meaning
deserves an explicit note.
S10 — Two source artifacts the repo correctly mirrors, worth knowing before someone re-reports them as
bugs: Douglas 0 BR Other Electric = $16.00 is non-monotonic (16 → 42 → 52 → 62 → 73 → 83) and recurs on
the Lawrence Row House and LeCompton pages — a systematic Nelrod/HUSM artifact for the Evergy KC territory,
confirmed three times independently, and it propagates into the Douglas SRO value (0.75 × 219 = 164.25).
And bedroom-range asymmetry: Dallas publishes 0–7 while every other new county stops at 5 or 6 and
reuses its top value, so a 7 BR household gets $1,064/mo in Dallas and $353/mo in Tarrant — correct per the
loader's clip-to-largest rule, but cross-county comparison at 6–7 BR is not meaningful.
S11 — Consider re-pulling the whole source set on rebase, and adding a 48453,2026,* Travis block. The
branch is 886 commits behind; HACA has already rebranded and published a 06-01-2026 schedule (values
265/279/325/375/424/479 under the same convention, at
https://austinha.org/wp-content/uploads/2026/07/2026-June-UA-Schedules.pdf), and LDCHA has posted a 2026
vintage (.../a4efb681b1c84c2ea9eeefab905aab62/2026%20Utility%20Allowances.pdf, unaudited) — so other
2025-vintage rows may also be superseded. Travis is currently the only new TX county without a 2026 vintage
alongside Dallas, El Paso, Tarrant and Bexar.
S12 — Cosmetic: hud_utility_allowance.py:18 is 90 chars (E501 is in ruff's ignore list, so CI-clean)
and :20 is an orphaned fragment "published SRO row " left over from the insertion — reflow lines 15-22
as one block. Also worth a one-line comment on the first of the three Wichita counties noting that 20015 /
20079 / 20173 carry byte-identical 2026 rows from a single source document, so a future editor changing one
knows to change all three.
PDF Audit Summary
| Category | Count |
|---|---|
| Confirmed correct (value reproduces exactly from a primary source) | 77 / 77 |
| Mismatches | 0 |
| Mismatches rejected (claimed by a role, refuted on verification) | 0 |
| Unmodeled (present in source, deliberately not encoded) | 6 classes — all gas/bottled-gas/fuel-oil fuel rows; electric heat-pump heating rows; gas flat service charges (Atmos CC-23 ×2, Bexar "Other-Gas" $10, El Paso "Natural Gas Charge" $20.02, Wichita $26, HACA $28.35); alternate unit types (detached house, row house, mobile home, energy-efficient); alternate localities (LDCHA Baldwin/Eudora/LeCompton); alternate El Paso water providers (7 of 8) and LDCHA rural-water-district tables |
| Pre-existing (not introduced by this PR) | 4 — pre-vintage back-projection (A13); 982.517(d) lesser-of not implemented (A12); CRLF line endings in the CSV; stray changelog.d/added/ + changelog.d/fixed/ subdirectories |
| Unverifiable | 0 (was 27 after Phase 4; closed by ext-1 and ext-2) |
Coverage ratio. Of the 77 new CSV values, the two PDF-audit roles verified 38 line-by-line
(26 TX — Dallas 8, Tarrant 6, Bexar 6, El Paso 6; 12 KS — Douglas 6, Riley 6) and the references role
re-derived a further 12 (Harris 6 + McLennan 6) = 50 / 77 at the end of Phase 4, with 27
(21 Wichita + 6 Travis) resting on blocked sources. Phase 5 external verification closed both:
ext-1 verified 21/21 Wichita against the schedule the WHA board adopted 7–0 on 2026-03-24, and
ext-2 verified 6/6 Travis against the archived HACA schedule — reaching 77 / 77. Every delta in
every audit is exactly 0.00; nothing anywhere exceeded the 0.30 flag threshold.
Convention control (worth noting): the same all-electric summation applied to the pre-existing
Sedgwick 2025 rows reproduces them exactly (210/224/266/307/349/390/415, 7/7). The convention was therefore
not reverse-engineered to fit the new numbers — it is the convention already in the file, applied
consistently.
Test coverage is a separate ratio and much lower: the PR's 12 new YAML cases pin 12 of 77 values
(15.6%), and all 12 are 2-bedroom. See A6.
Validation Summary
| Check | Result |
|---|---|
| Value accuracy (77 new CSV values vs primary sources) | PASS — 77/77 exact, 0 mismatches |
| Summing convention applied consistently | PASS — all-electric / Multi-Family / gas + heat-pump excluded, verified across all 12 counties and against the pre-existing Sedgwick 2025 control |
| Source document selection (dominant PHA) | FAIL — C3, rule violated in 4 of 7 TX counties (El Paso worst at 3.8%) |
| Row-inclusion decisions | FAIL — C2, Harris's unlabeled $23 included against the PR's own fuel-typed rule |
| Reference URLs resolve | FAIL — C4 (Travis dead) ; A2 (Wichita reachable only in a human browser) ; A3/A4/A5 (landing pages, packet, mutable blobs) |
| Adopted-vs-proposed source status | PASS — Wichita confirmed adopted 7–0 on 2026-03-24 (A2); Douglas confirmed by Resolution 2024-18 + printed 01/01/2025 date (A3) |
| Jurisdiction (cited PHA operates in the county) | PASS — zero mismatches; Wichita's Butler/Harvey coverage independently confirmed (A1) |
Vintage (year) matches source effective date |
PASS — no 2025-dated document backing a 2026 row or vice versa |
| Bedroom coverage / no silent $0 fallback | PASS — every new county is contiguous from bd0; expansion to bd0–8 reuses the largest published value; no NaN→0 path |
| SRO handling (24 CFR 982.604(b)) | PASS — no new county publishes an SRO row; all 12 correctly take the 0.75 × bd0 parameter path |
| CSV data hygiene | PASS — 292 data rows, 4 fields each, zero duplicate (county_fips, year, bedrooms) keys, all FIPS 5-digit and state-correct, all values bare integers, every new group strictly monotonic, file ends with newline. Sort order broken (A10) — cosmetic |
| New YAML tests correct | PASS — all 12 expected values re-derived independently by three roles; bare YYYY periods, absolute_error_margin: 0.01 on all currency outputs, no invented input variables, correct entity levels |
| Test coverage sufficiency | CONCERN — A6, 12/77 pinned, all 2-bedroom; no SRO, pre-vintage, or vintage-boundary case for any new county |
| Partner contract test | REQUIRES MAINTAINER DECISION — C1; shape preserved and arithmetic correct, notification status unknown to this review |
| Formula / variable changes | NONE — no formula, variable, or parameter YAML added or changed; no hard-coded policy values; no # pragma: no cover added |
| Changelog fragment | PASS — changelog.d/hud-metro-utility-allowances.added.md, top-level, correct type |
| CI | PASS — 36/36 checks green |
| Branch freshness | STALE — BEHIND 886 / AHEAD 4; rebase recommended (informational) |
Review Severity: REQUEST_CHANGES
Four Criticals, none of them arithmetic. The transcription work in this PR is genuinely excellent —
all 77 new values reproduce exactly from primary HUD-52667 schedules under a convention that is applied
consistently and that independently reproduces the pre-existing rows. What blocks merge is: a partner
contract test expected output changed and needs conscious acceptance plus confirmation that the partner
was notified (C1 — this review cannot determine whether that happened); an unlabeled $23 row included
in Harris against the PR's own fuel-typed rule, worth $276/yr per household and likely overstating all six
Harris values (C2); a stated "dominant PHA" rule that the data contradicts in 4 of 7 Texas counties,
with El Paso encoded from a PHA holding 3.8% of the county's vouchers (C3); and a dead citation for
Travis whose replacement URL is already established (C4). C4 and much of the Should-Address list are
mechanical fixes with the exact replacement text supplied below/above; C1, C2 and C3 need an author decision.
Next Steps
- Run the
CLAUDE.mdpartner three-question gate with the user before any further edit to
.../partners/analytics_coverage/edge_cases/federal/housing/housing_assistance/federal.yaml(C1).
This blocks A7's comment fix and S5 as well, since both touch that file. - Ask the author to confirm the Harris $23 row with HCHA (C2) — exclude and re-pin
hud_utility_allowance.yaml:266to276 * 12if gas, or document it in a code comment if electric. - Ask the author to either re-source Harris/Bexar/Tarrant/El Paso from the dominant PHA, or restate the
selection rule in the PR body, the variable docstring andutility_allowance/__init__.py(C3).
El Paso should be revisited regardless. - Swap the dead HACA URL for the Wayback URL given in C4 — a mechanical, zero-risk fix.
- Work the citation cluster A1–A5 (Wichita jurisdiction reference + archive, LDCHA standalone schedule,
El Paso provider note, Riley direct document links) and the documentation cluster A7–A8. - Extend tests per A6 and A9, then rebase onto
upstream/main(886 behind) and re-run.
To auto-fix issues: run the fix-pr workflow for this PR.
Summary
Extends
hud_utility_allowanceto the metropolitan counties where Housing Choice Voucher use concentrates, adding schedules for seven Texas metro counties and four Kansas counties (plus a 2026 Wichita vintage). Previously utility-allowance coverage was LA County, the rural TDHCA service area in Texas, and four Kansas PHAs — so the metro cores (Houston, Dallas, Fort Worth, San Antonio, Austin, El Paso, Waco) returned $0 even withtenant_pays_utilities.Background
Utility allowances are set per public housing agency under 24 CFR 982.517, and the model keys them on
county_fips. HUD does not publish a national dataset, so each county's schedule is transcribed from its dominant PHA and collapsed into one monthly amount per bedroom using the existing convention: Multi-Family unit type, all-electric, summed over every tenant-paid line item (heating/cooking/water-heating electric, other electric, air conditioning, water, sewer, trash, any flat electric service charge, and the range and refrigerator allowances).Coverage added
Texas metro counties
Kansas counties
Verification
Every dollar value was checked against the originating PHA schedule PDF. Notable per-PHA quirks handled: flat "Electric Fee" service-charge rows (Johnson $14, Manhattan $15, Topeka $14, El Paso $12, Bexar $10); water/sewer/trash on separate sheets or provider tables (El Paso's 8 providers → El Paso Water Utilities PSB; Manhattan's separate water-sewer sheet plus a $35 trash row); one-schedule-per-county selection where a county hosts multiple PHAs (dominant PHA used, matching existing precedent); and McLennan's "ATMOS CC-23" row (a gas customer charge, excluded under the all-electric convention; the schedule has no electric service-charge row).
TDHCA itself publishes schedules for only 28 of its 34 service-area counties (2024 and 2026 vintages both cover the same 28). Of the remaining gap counties, McLennan is the only one with a published schedule from another PHA (Waco HA); Bosque, Cooke, Crockett, McMullen, and Wise have no schedule published online (Decatur HA provides Wise County's by email request only).
Not a formula change
hud_utility_allowance.pyandutility_allowance/__init__.pyare touched only for source references and coverage docstrings — the lookup already keys oncounty_fips, so new counties resolve automatically.Partner contract tests
The analytics-coverage tripwire case
housing_assistance_tx_tenant_pays_utilities_no_allowancewas written to force a reviewed diff when Dallas gained a schedule; this PR is that diff. The case is renamed to..._dallas_allowanceand its expected value rises from 15,600 to 19,464 (Dallas 2-bd allowance of $322/mo = $3,864/yr, rent side still binding). A new..._no_allowancecase re-pins the uncovered-county boundary to Lubbock County (48303), which no encoded PHA schedule, ZIP payment standard, or mandatory-SAFMR designation covers. Partner impact: households in the newly covered counties withtenant_pays_utilitieswill seehousing_assistanceincrease.Tests
Adds one test case per new county (including McLennan at $240/mo for 2-bd); all pass. The existing Wichita SRO test (0.75 × $210 = $157.50) is unaffected, since the new 2026 Sedgwick vintage does not change period-2025 resolution.
Files
parameters/gov/hud/utility_allowance/county_utility_allowances.csvparameters/gov/hud/utility_allowance/__init__.py(docstring only)variables/gov/hud/hud_utility_allowance.py(references/docstring only)tests/policy/baseline/gov/hud/hud_utility_allowance.yamltests/policy/baseline/partners/analytics_coverage/edge_cases/federal/housing/housing_assistance/federal.yamlchangelog.d/hud-metro-utility-allowances.added.md🤖 Generated with Claude Code