Every figure traces to a source; every correction is published here, not hidden.
Check our work
Every number above came from somewhere. Here is where.
Every figure this site publishes carries a source and a locator, and every correction is printed here in full. This city’s ledger carries 62 corrections and 3 source discrepancies today; a fact corrected twice counts once.
Corrections — entries we revised after publishing (62)
Each of these is an entry this site published and then revised. Some are figures that changed. Some are the same figure with a fuller account of where it comes from and why we publish it over another source. What it says now, when it was revised, and why — in full, not summarised.
dp.city.aggregate.netrev 1 (-$22.6M/yr) was computed on the GIS-city-attribute parcel base, which omitted 127 mappable city-taxed parcels ($154.1M appraised, disproportionately commercial). Re-extracted on roll jurisdiction 054 (the taxing fact): the gap SHRINKS $1,135,447 (5.0%). This correction weakens our own central number; the story is unchanged and is not restated to compensate.
dp.city.pop.over65Prior revision cited 16.42% via Neilsberg - a SECONDARY aggregator (ACS 2019-2023 vintage). The source-drift rule forbids citing a secondary characterization of a primary source. Re-sourced to the Census primary (QuickFacts / ACS 2020-2024 5-yr): 17.4%. The number did NOT hold against the primary (corrected, not merely re-labeled); the direction is unchanged - an aging town with a high, rising senior share.
dp.counterfactual.householdrev 1 named the Council's own derivation file (counterfactual_no_plants.md) on the visible source line, so the page appeared to cite itself. The source line now names the primary the figure actually rests on; the derivation is reclassified into the locator as "derived via" and is not stripped — the working is still reproducible from it. No value changed.
dp.counterfactual.medianrev 1 named the Council's own derivation file (counterfactual_no_plants.md) on the visible source line, so the page appeared to cite itself. The source line now names the primary the figure actually rests on; the derivation is reclassified into the locator as "derived via" and is not stripped — the working is still reproducible from it. No value changed.
dp.counterfactual.raterev 1 named the Council's own derivation file (counterfactual_no_plants.md) on the visible source line, so the page appeared to cite itself. The source line now names the primary the figure actually rests on; the derivation is reclassified into the locator as "derived via" and is not stripped — the working is still reproducible from it. No value changed.
dp.cover.exp.total.fy2025Provenance repair, not a correction: the figure, its label and its locator are unchanged from revision 1. What changed is that the FY2025 ACFR this fact has always cited in prose is now archived by the Council and openable from the page, so source_url carries it. Recorded as change_class = metadata and deliberately excluded from the published-corrections count.
dp.cover.margin.comingled.fy2025rev 1 labeled this "(the complete figure)" and its locator framed the districts as "ruled comingled" — the pre-correction stance. The ratified citation-pass ruling (repo @e0bc0f9) went the other way: the districts are discretely presented / separate per ACFR Note 1, the city-only −$4,443,928 stays the headline, and this figure is alternate-scope context. The relabel never reached the substrate until this rev.
dp.cover.margin.noinvest.fy2025Provenance repair, not a correction: the figure, its label and its locator are unchanged from revision 1. What changed is that the FY2025 ACFR this fact has always cited in prose is now archived by the Council and openable from the page, so source_url carries it. Recorded as change_class = metadata and deliberately excluded from the published-corrections count.
dp.cover.rev.ownrecurring.fy2025Provenance repair, not a correction: the figure, its label and its locator are unchanged from revision 1. What changed is that the FY2025 ACFR this fact has always cited in prose is now archived by the Council and openable from the page, so source_url carries it. Recorded as change_class = metadata and deliberately excluded from the published-corrections count.
dp.debt.percapita.startRev 2 said $538 (FY2016), read in good faith from the FY2025 ACFR statistical table. Per the year-shift finding (see dp.series.netdebt.fy2016 rev 2), $538 is FY2015's value in every contemporaneous report; FY2016 is $493.
dp.food.household.day_kcalBasket v3 (2026-08-28): the day was re-frozen at ~2,000 kcal rather than 1,796 -- bread 2 to 4 slices, rice 1.5 to 2 oz -- for a realistic adult maintenance day, and two item labels were corrected to their BLS series titles. Same ten items, same prices; only the quantities moved. Revision 1 was basket v2, which remains frozen and published.
dp.food.household.day.minutes_meanBasket v3 (2026-08-28): the day was re-frozen at ~2,000 kcal rather than 1,796 -- bread 2 to 4 slices, rice 1.5 to 2 oz -- for a realistic adult maintenance day, and two item labels were corrected to their BLS series titles. Same ten items, same prices; only the quantities moved. Revision 1 was basket v2, which remains frozen and published.
dp.food.household.day.minutes_medianBasket v3 (2026-08-28): the day was re-frozen at ~2,000 kcal rather than 1,796 -- bread 2 to 4 slices, rice 1.5 to 2 oz -- for a realistic adult maintenance day, and two item labels were corrected to their BLS series titles. Same ten items, same prices; only the quantities moved. Revision 1 was basket v2, which remains frozen and published.
dp.food.household.day.minutes_p10Basket v3 (2026-08-28): the day was re-frozen at ~2,000 kcal rather than 1,796 -- bread 2 to 4 slices, rice 1.5 to 2 oz -- for a realistic adult maintenance day, and two item labels were corrected to their BLS series titles. Same ten items, same prices; only the quantities moved. Revision 1 was basket v2, which remains frozen and published.
dp.food.household.day.usd_per_calorieBasket v3 (2026-08-28): the day was re-frozen at ~2,000 kcal rather than 1,796 -- bread 2 to 4 slices, rice 1.5 to 2 oz -- for a realistic adult maintenance day, and two item labels were corrected to their BLS series titles. Same ten items, same prices; only the quantities moved. Revision 1 was basket v2, which remains frozen and published.
dp.food.household.usd_per_dayBasket v3 (2026-08-28): the day was re-frozen at ~2,000 kcal rather than 1,796 -- bread 2 to 4 slices, rice 1.5 to 2 oz -- for a realistic adult maintenance day, and two item labels were corrected to their BLS series titles. Same ten items, same prices; only the quantities moved. Revision 1 was basket v2, which remains frozen and published.
dp.food.household.usd_per_day.nationalBasket v3 (2026-08-28): the day was re-frozen at ~2,000 kcal rather than 1,796 -- bread 2 to 4 slices, rice 1.5 to 2 oz -- for a realistic adult maintenance day, and two item labels were corrected to their BLS series titles. Same ten items, same prices; only the quantities moved. Revision 1 was basket v2, which remains frozen and published.
dp.food.household.usd_per_meal_avgBasket v3 (2026-08-28): the day was re-frozen at ~2,000 kcal rather than 1,796 -- bread 2 to 4 slices, rice 1.5 to 2 oz -- for a realistic adult maintenance day, and two item labels were corrected to their BLS series titles. Same ten items, same prices; only the quantities moved. Revision 1 was basket v2, which remains frozen and published.
dp.fund.salestax.ratePrior revision asserted '2.0% (Texas municipal statutory maximum)', source_type=attributed, with no page locator. Now sourced to the Comptroller's rate table with the exact component breakdown.
dp.gov.council-position-1.holderrev 1 cited the Election Register, whose latest entry is 2025 and which therefore still carried Ron Martin in Position 5. The 2026-08-18 City Council agenda names the sitting body on its own face and is both current and authoritative, so it replaces the register here and the register's one-seat lag is retired.
dp.gov.council-position-2.holderrev 1 cited the Election Register, whose latest entry is 2025 and which therefore still carried Ron Martin in Position 5. The 2026-08-18 City Council agenda names the sitting body on its own face and is both current and authoritative, so it replaces the register here and the register's one-seat lag is retired.
dp.gov.council-position-3.holderrev 1 cited the Election Register, whose latest entry is 2025 and which therefore still carried Ron Martin in Position 5. The 2026-08-18 City Council agenda names the sitting body on its own face and is both current and authoritative, so it replaces the register here and the register's one-seat lag is retired.
dp.gov.council-position-4.holderrev 1 cited the Election Register, whose latest entry is 2025 and which therefore still carried Ron Martin in Position 5. The 2026-08-18 City Council agenda names the sitting body on its own face and is both current and authoritative, so it replaces the register here and the register's one-seat lag is retired.
dp.gov.council-position-5.holderrev 1 cited the city's Position 5 page because the Election Register had not been updated past 2025 and still carried Ron Martin, and that discrepancy was stamped on the page. The 2026-08-18 City Council agenda names Eric Ripley in Position 5 on its own face — a current, authoritative primary. The discrepancy is resolved, not merely stamped.
dp.gov.council-position-6.holderrev 1 cited the Election Register, whose latest entry is 2025 and which therefore still carried Ron Martin in Position 5. The 2026-08-18 City Council agenda names the sitting body on its own face and is both current and authoritative, so it replaces the register here and the register's one-seat lag is retired.
dp.gov.mayor.holderrev 1 cited the Election Register, whose latest entry is 2025 and which therefore still carried Ron Martin in Position 5. The 2026-08-18 City Council agenda names the sitting body on its own face and is both current and authoritative, so it replaces the register here and the register's one-seat lag is retired.
dp.hearing2026.voteSUPERSEDED IN PLACE, not withdrawn. This figure is correct and is retained as the original capture, but it is no longer the record: the same vote now lives as structured per-member facts under dp.record.2026-08-18.city-council.tnt-26-002.vote.<member>, with the outcome and the control total. Read those. This row stays so the ledger's own history is not rewritten.
dp.hearing2026.vote_forSUPERSEDED IN PLACE, not withdrawn. This figure is correct and is retained as the original capture, but it is no longer the record: the same vote now lives as structured per-member facts under dp.record.2026-08-18.city-council.tnt-26-002.vote.<member>, with the outcome and the control total. Read those. This row stays so the ledger's own history is not rewritten.
dp.record.2026-05-05.city-council.quarantinerev 1 said 'Not published.' That was true when written and is no longer true. The refusal is kept on the record rather than deleted — it happened, and the reason it happened is the useful part — but the row now states the outcome instead of a stale refusal.
dp.record.2026-06-16.city-council.quarantinerev 1 said 'Not published.' That was true when written and is no longer true. The refusal is kept on the record rather than deleted — it happened, and the reason it happened is the useful part — but the row now states the outcome instead of a stale refusal.
dp.record.2026-07-21.city-council.videorev 1 said 'Watch the meeting'. The same error was corrected on the 2026-08-18 row on 2026-08-30, but only on that row — the pipeline that generates this fact still emitted 'Watch', so the correction had been applied to one output and not to the thing that makes the outputs. The generator is fixed in the same pass as this row.
dp.record.2026-08-18.city-council.motionsrev 1 said '10 by unnamed voice acclamation, 1 seat-by-seat'. The 'seat-by-seat' half is withdrawn: it implied a called roll on the tax vote, and no roll was called. Chairman spot-check of clip 1781 (2026-08-30) plus the transcript's own timings at 00:09:07-00:09:15: after 'We'll start down here' there are TEN aye-utterances in about seven seconds for a SEVEN-member body, several under 0.2 seconds and overlapping, and not one of them is attached to a name. That is a group response, not a called roll — and the count is not even reliable enough to assert seven. The tax vote differs from the other ten only in lacking an 'all in favor' call — not in producing a per-member record. This corrects an overclaim by this site, not a change in what the city did.
dp.record.2026-08-18.city-council.tnt-26-002.meetingrev 1 recorded this as an INFERENCE, and said so on the page: the § 26.06 notice publishes the vote and the rate but not the date, so the join to 2026-08-18 rested on matching motion text and rate against the Legistar agenda. It is no longer an inference. The city clerk sets per-item index points on its own recording, and index point 112266 places TNT 26-002 at 00:08:11 with the recorded vote inside its window. The city itself asserts the item; we no longer reason our way to it.
dp.record.2026-08-18.city-council.videorev 1 called this 'video' and the page said 'Watch the meeting'. Both were wrong in the way that matters. The stream does carry an H.264 track, which is what a codec probe reports — but the picture is a static title card reading 'MEETING AUDIO ONLY'. The container was measured and the frame was never looked at. There is no video of the room.
dp.record.gap.vote.methodrev 1 stated that the recording 'confirms that one was indeed taken seat by seat, corroborating the statutory notice from the other side'. Withdrawn. Chairman spot-check of clip 1781 (2026-08-30) plus the transcript's own timings at 00:09:07-00:09:15: after 'We'll start down here' there are TEN aye-utterances in about seven seconds for a SEVEN-member body, several under 0.2 seconds and overlapping, and not one of them is attached to a name. That is a group response, not a called roll — and the count is not even reliable enough to assert seven. The notice and the recording do not corroborate each other on the manner of the vote; the notice is the only source of the names, and the recording shows a room that named nobody.
dp.salestax.ccpd.revenuerev 1 ($2,000,000) was the FY2025-26 sales-tax revenue BUDGETED in the city's Adopted Budget — a round planning figure, not an outcome. Replaced with $2,588,831, the FY2025 audited component-unit actual from the ACFR: the same figure and the same locator the trend page cites, so the two pages no longer disagree about the same district. The budgeted figure is not withdrawn; it stands at revision 1.
dp.salestax.cdc.revenuerev 1 ($4,000,000) was the FY2025-26 sales-tax revenue BUDGETED in the city's Adopted Budget — a round planning figure, not an outcome. Replaced with $5,190,905, the FY2025 audited component-unit actual from the ACFR: the same figure and the same locator the trend page cites, so the two pages no longer disagree about the same district. The budgeted figure is not withdrawn; it stands at revision 1.
dp.salestax.fcpemsd.revenuerev 1 ($2,000,000) was the FY2025-26 sales-tax revenue BUDGETED in the city's Adopted Budget — a round planning figure, not an outcome. Replaced with $2,580,330, the FY2025 audited component-unit actual from the ACFR: the same figure and the same locator the trend page cites, so the two pages no longer disagree about the same district. The budgeted figure is not withdrawn; it stands at revision 1.
dp.series.netdebt.fy2016Was $17,448,182 (rev 1, from the FY2025 ACFR statistical table). YEAR-SHIFT FINDING (M17 Phase 2): the FY2021+ statistical tables - including the current FY2025 ACFR this value was originally seeded from - shifted the 'Less: restricted' row of the Ratios of General Bonded Debt table one year later than the contemporaneous audited CAFRs. The GO-bonds row aligns identically in every report; only restricted/net/per-capita shifted. The later tables contradict two OWN-YEAR audited columns (FY2019 CAFR: $226/capita at 2019; FY2020 CAFR: $287/capita at 2020). The prior value was a chimeric pairing (this year's GO bonds minus the PRIOR year's restricted amount) that appears in no contemporaneous report. Corrected to the FY2019/FY2020 CAFR (contemporaneous, own-year-anchored) values. FY2021-FY2025 values are own-year-fresh in their reports and stand (note: FY2022 own report says restricted 5,648,708 / net 41,035,116 vs FY2025's 5,638,708 / 41,045,116 - a $10,000 discrepancy, flagged, immaterial to the series).
dp.series.netdebt.fy2017Was $14,255,389 (rev 1, from the FY2025 ACFR statistical table). YEAR-SHIFT FINDING (M17 Phase 2): the FY2021+ statistical tables - including the current FY2025 ACFR this value was originally seeded from - shifted the 'Less: restricted' row of the Ratios of General Bonded Debt table one year later than the contemporaneous audited CAFRs. The GO-bonds row aligns identically in every report; only restricted/net/per-capita shifted. The later tables contradict two OWN-YEAR audited columns (FY2019 CAFR: $226/capita at 2019; FY2020 CAFR: $287/capita at 2020). The prior value was a chimeric pairing (this year's GO bonds minus the PRIOR year's restricted amount) that appears in no contemporaneous report. Corrected to the FY2019/FY2020 CAFR (contemporaneous, own-year-anchored) values. FY2021-FY2025 values are own-year-fresh in their reports and stand (note: FY2022 own report says restricted 5,648,708 / net 41,035,116 vs FY2025's 5,638,708 / 41,045,116 - a $10,000 discrepancy, flagged, immaterial to the series).
dp.series.netdebt.fy2018Was $11,424,386 (rev 1, from the FY2025 ACFR statistical table). YEAR-SHIFT FINDING (M17 Phase 2): the FY2021+ statistical tables - including the current FY2025 ACFR this value was originally seeded from - shifted the 'Less: restricted' row of the Ratios of General Bonded Debt table one year later than the contemporaneous audited CAFRs. The GO-bonds row aligns identically in every report; only restricted/net/per-capita shifted. The later tables contradict two OWN-YEAR audited columns (FY2019 CAFR: $226/capita at 2019; FY2020 CAFR: $287/capita at 2020). The prior value was a chimeric pairing (this year's GO bonds minus the PRIOR year's restricted amount) that appears in no contemporaneous report. Corrected to the FY2019/FY2020 CAFR (contemporaneous, own-year-anchored) values. FY2021-FY2025 values are own-year-fresh in their reports and stand (note: FY2022 own report says restricted 5,648,708 / net 41,035,116 vs FY2025's 5,638,708 / 41,045,116 - a $10,000 discrepancy, flagged, immaterial to the series).
dp.series.netdebt.fy2019Was $8,563,921 (rev 1, from the FY2025 ACFR statistical table). YEAR-SHIFT FINDING (M17 Phase 2): the FY2021+ statistical tables - including the current FY2025 ACFR this value was originally seeded from - shifted the 'Less: restricted' row of the Ratios of General Bonded Debt table one year later than the contemporaneous audited CAFRs. The GO-bonds row aligns identically in every report; only restricted/net/per-capita shifted. The later tables contradict two OWN-YEAR audited columns (FY2019 CAFR: $226/capita at 2019; FY2020 CAFR: $287/capita at 2020). The prior value was a chimeric pairing (this year's GO bonds minus the PRIOR year's restricted amount) that appears in no contemporaneous report. Corrected to the FY2019/FY2020 CAFR (contemporaneous, own-year-anchored) values. FY2021-FY2025 values are own-year-fresh in their reports and stand (note: FY2022 own report says restricted 5,648,708 / net 41,035,116 vs FY2025's 5,638,708 / 41,045,116 - a $10,000 discrepancy, flagged, immaterial to the series).
dp.series.netdebt.fy2020Was $10,525,270 (rev 1, from the FY2025 ACFR statistical table). YEAR-SHIFT FINDING (M17 Phase 2): the FY2021+ statistical tables - including the current FY2025 ACFR this value was originally seeded from - shifted the 'Less: restricted' row of the Ratios of General Bonded Debt table one year later than the contemporaneous audited CAFRs. The GO-bonds row aligns identically in every report; only restricted/net/per-capita shifted. The later tables contradict two OWN-YEAR audited columns (FY2019 CAFR: $226/capita at 2019; FY2020 CAFR: $287/capita at 2020). The prior value was a chimeric pairing (this year's GO bonds minus the PRIOR year's restricted amount) that appears in no contemporaneous report. Corrected to the FY2019/FY2020 CAFR (contemporaneous, own-year-anchored) values. FY2021-FY2025 values are own-year-fresh in their reports and stand (note: FY2022 own report says restricted 5,648,708 / net 41,035,116 vs FY2025's 5,638,708 / 41,045,116 - a $10,000 discrepancy, flagged, immaterial to the series).
dp.series.netposition.fy2016rev 1 plotted UNRESTRICTED net position 34,445,882 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.series.netposition.fy2017rev 1 plotted UNRESTRICTED net position 30,001,279 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.series.netposition.fy2018rev 1 plotted UNRESTRICTED net position 31,608,305 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.series.netposition.fy2019rev 1 plotted UNRESTRICTED net position 31,892,396 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.series.netposition.fy2020rev 1 plotted UNRESTRICTED net position 39,484,137 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.series.netposition.fy2021rev 1 plotted UNRESTRICTED net position 44,484,081 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.series.netposition.fy2022rev 1 plotted UNRESTRICTED net position 49,692,131 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.series.netposition.fy2023rev 1 plotted UNRESTRICTED net position 54,215,034 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.series.netposition.fy2024rev 1 plotted UNRESTRICTED net position 56,225,852 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.series.netposition.fy2025rev 1 plotted UNRESTRICTED net position 57,437,669 (a positive, rising ACFR component) under the label 'Net financial position'. The M17 cross-val against the completed Strong Towns Decoder found the true indicator (financial assets - liabilities) is NEGATIVE every year and near its worst - a narrative inversion. The proxy is replaced by the named indicator (M18).
dp.vpa.commercialrev 1 (-$7,634/ac) was computed on the GIS-city parcel base, which omitted the commercial seam parcels (coverage correction #24).
dp.vpa.commercial.grossrev 1 named the Council's own derivation file (net_fiscal_productivity.md) on the visible source line, so the page appeared to cite itself. The source line now names the primary the figure actually rests on; the derivation is reclassified into the locator as "derived via" and is not stripped — the working is still reproducible from it. No value changed.
dp.vpa.industrialrev 1 named the Council's own derivation file (net_fiscal_productivity.md) on the visible source line, so the page appeared to cite itself. The source line now names the primary the figure actually rests on; the derivation is reclassified into the locator as "derived via" and is not stripped — the working is still reproducible from it. No value changed.
dp.vpa.industrial.grossrev 1 named the Council's own derivation file (net_fiscal_productivity.md) on the visible source line, so the page appeared to cite itself. The source line now names the primary the figure actually rests on; the derivation is reclassified into the locator as "derived via" and is not stripped — the working is still reproducible from it. No value changed.
dp.vpa.land.negative.sharerev 1 (53.1%) was computed on the GIS-city parcel base (coverage correction #24: +153.3 analyzed negative acres).
dp.vpa.residential.grossrev 1 named the Council's own derivation file (net_fiscal_productivity.md) on the visible source line, so the page appeared to cite itself. The source line now names the primary the figure actually rests on; the derivation is reclassified into the locator as "derived via" and is not stripped — the working is still reproducible from it. No value changed.
dp.vpa.residential.mfrev 2 (-$4,734/ac) was computed on the GIS-city parcel base (coverage correction #24: cost pool spread over 3,363.1 served ac instead of 3,209.8).
dp.vpa.residential.sfrev 2 (-$6,939/ac) was computed on the GIS-city parcel base (coverage correction #24: +87 sf parcels, +21.4 ac, +$23.2M; cost pool spread over 3,363.1 served ac).
dp.vpa.stresstestrev 1 (-$856/ac) was computed from the SUPERSEDED appraised-basis residential rate (-5,575/ac): -5,575 + 4,718 = -857. The ratified taxable-basis methodology (M6 exemption-wedge correction) gives -2,073/ac on the same old base — the fact was never restated when the basis correction landed. This revision reflects BOTH the basis correction and the jurisdiction-corrected parcel base (correction #24); the two causes are named separately because the figure was wrong on its own terms before the coverage gap was found.
Source discrepancies — where our figure differs from another source (3)
These are not corrections to us. Another source — a city page, an earlier brief — carries a different figure, and this records why ours differs. We never published the other number.
dp.ida.pilot.currentCity Industrial District webpage states a flat 63%; the FY2025 ACFR PILOT ($14,884,571) implies ~65%. Prior published/webpage figure 63% corrected to 65%.
dp.isd.recapture.sy2024The $9,888,063 figure previously attached to '2024' is NOT a 2024 number - it is DPISD's SY2010 recapture payment. Misattribution corrected against the TEA ledger.
dp.vpa.parcel.pemexThe finding/brief figure '$434M / 680 ac (~$638K/ac)' mixed two aggregations of the same owner: $433,147,733 is the entity total across all three HCAD name variants (17 parcels, 732.6 ac), while 680.4 ac is the 'DEER PARK REFINING LP'-variant holding alone (14 parcels, $395,651,840). Consistent figures: entity-level $433,147,733 / 732.6 ac = $591,232/ac (seeded here), or LP-variant $395,651,840 / 680.4 ac = $581,525/ac. Either way the finding's argument strengthens — both sit further below the district average than the conflated ~$638K/ac.
Facts rendered on this page
This table is generated from the page itself: every fact this page rendered, with its value, source, and locator, exactly as they sit in the verified-facts ledger. It is this page’s own provenance — the corrections above cover the whole city ledger.
| Key | Value | Source · locator |
|---|---|---|
| dp.city.area | 10.575 sq mi (6,768 ac) | US Census TIGER/Line (GEOID 4819624) · AREALAND field; cross-checked vacant_land_analysis.md |
| dp.city.area.acfr_claim | ~15 sq mi (city + ETJ) | City of Deer Park FY2025 ACFR · Letter of Transmittal, 'land area of 15 square miles' (printed p.1 / PDF p.5); vacant_land_analysis.md |
| dp.city.pop | 33,823 (2020: 35,315) | City of Deer Park FY2025 ACFR · Demographic and Economic Statistics (printed p.125 / PDF p.133) |
Nobody is going to read the annual financial report. That is the whole design of the thing — the volume is the defense. So a machine read all of it: every number above carries a locator back into a source document, every sentence between them is either a cited fact or a fair reading of cited facts, and the unverified never reaches this page at all — the database only exposes the verified ledger. You will almost certainly never check. But you could.