# Changelog

## 2026-11-03 · Primer, timeline, renters, error reports, flyer, analytics

- **"How Kennett pays for itself"** (`dist/primer.js`):
  - 2027 revenue by type across all nine funds, reconciling exactly to the $15,351,980 published total (tested).
  - A nine-funds explainer.
  - How a property tax bill splits between school (68%), Borough (22%) and County (10%), plus municipal millage in nearby boroughs. Rates come from the Chester County 2026 tax table (`dist/county-rates-2026.json`), with caveats about comparing rates.
  - Four core budget concepts.
- **Budget timeline** with a "we are here" marker. The Nov 2 agenda documents are listed but not yet reviewed.
- **"If you rent" topic.**
- **"Go deeper" navigation** for the detailed sections further down the page.
- **Error reports:** a "Spot an error?" form (footer, About, every topic answer) posts to `api/report.js`, a Vercel Function. It relays reports through Resend to an inbox address stored only as the `REPORT_TO` environment variable; the address never reaches the browser. Includes a honeypot field and rate limit. Needs `RESEND_API_KEY` to send.
- **Public corrections log** (`dist/corrections.json`), seeded with today's audit fixes.
- **Share preview** image and metadata, a favicon, and a printable bilingual QR flyer (`dist/flyer.html`).
- **Analytics:** Vercel Web Analytics, cookieless. Custom events record only which feature or topic was used, never typed text, addresses, assessed values or questions (`dist/track.js`). The privacy copy is updated to match.
- **Verified:** the current Borough rate of 11.8 mills now matches the County 2026 table directly.

## 2026-11-03 · Source audit corrections + household hook

Source audit against all three PDFs, including the draft's adjustment-note pages (draft PDF pp. 10, 12, 14, 17, 18, 19, 21, 22, 23) that earlier versions did not cite. Several "unexplained" claims were wrong and are corrected:
- Sewer 30% vs 8.3%: the 30% is applied to the 2027 no-increase estimate of $1,150,000, giving $1,495,000 (draft p17, 8-2). The 2026 budget of $1,380,000 was above 2025 actual. The documents agree.
- Water: the $791,705 capital line includes the $316,705 reserve allocation, leaving about $475,000 for projects (draft p14, 6-6).
- Police: the blank SRO line is the removal of one vacant uniformed officer position, about $164,130 (draft p10, item 5; message p4).
- Trails and shade trees: coded as a general cut (draft p10, item 1).
- Trash: the reserve was raised to meet reserve policy, with $11,400 called excess (draft p19, 10-4). The contract is out for rebid (message p7).
- Parking: $240,000 General Capital Fund loan; 3% pass and $2 hourly increases (message p7). The documents disagree on "all hours" vs "after the first hour"; this is disclosed.
- Capital and debt: Police Station and Birch Street loans were paid off in 2026 (draft p22, 30-6/7). The $500,000 is set aside as a Cypress Street grant match (message p7).
- Fire/EMS: the Borough *re-joined* the Commission; the payment includes an $85,000 grant credit (draft p23, 51-2; message p8).
- Staff: the benefits group includes a $63,165 reserve, not an employee cost. The pension increase is set to the 2027 MMO (draft p10, item 12).
- Tax: the $1,441 → $1,563 figures are on message p1. The current 11.8-mill rate comes from the County table, not the budget documents.
- Totals bridge: excluding Capital, the gap is $242,800 = $238,440 Parking gap + $4,360 unexplained.
- New "Permits and inspections" topic (draft pp. 11–12).
- Neutrality: removed causal and judgmental phrasing ("part of why sewer bills are high", "a loan ... does not remove the cost", savings-run-out aside).

Design: the Borough's average-household +$430 (message pp. 1–2) is back as the hero hook, broken into sewer/tax/water/trash pieces that open each topic. The Borough's published contact (help@kennettsq.org, (610) 444-6020, from the message footer) is added to About and the questions panel.

## 2026-11-03 · Ask the budget + redesign

- New resident-first search ("Ask the budget", `dist/ask.js`) at the top of the page. Everyday words in English or Spanish ("my water bill", "potholes", "cops", "basura") open one of 13 plain-language topics: water, sewer, trash, property tax, police, fire/EMS, streets, parking, parks/library, savings, debt, staff/pensions and where the money comes from.
- Each topic shows the Borough's average-household figure where one is published, what the budget says, why it matters to a resident, a table of key source lines (2024–2025 actual, 2026 budget, 2027 proposed, change, trend) with account codes and PDF page links, what the documents do not explain, and neutral questions residents could ask Council.
- Every table figure is read from the ledger at render time. Figures quoted in topic prose are checked against the ledger in `tests/ask.test.js`. Blank source cells show as "blank", never as zero.
- Searches also list matching budget lines and glossary terms. `?q=` and `?topic=` URLs can be shared.
- "My questions" notebook: add suggested questions or write your own, edit them, then copy, print (questions only) or open a pre-filled email. Questions are stored only in the browser's localStorage.
- Visual redesign: sticky top bar, green hero with a large search box, serif headings, warm paper palette, topic tiles. Increases and decreases are shown in brick and slate rather than red and green, so changes are not framed as good or bad.

## 2026-10-08 · rc.4

- Rebuilt the entry experience around the nine-fund proposed total, expandable proposed household changes and integrated evidence.
- Added bilingual revenue account exploration, ranked spending changes, request-to-proposal calculation bridge and source timeline.
- Clearly labeled $508 household calculation as an application example; retained the published 9% trash claim alongside its 9.4% example arithmetic.
- Added Police explanation and always-visible source links on spending cards; restore keyboard focus after opening a card or changing its detail tab.
- Added automated tests for the calculation bridge and bilingual story.
- Live County lookup and rendered mobile/desktop QA remain release blockers.

# Kennett Budget Explorer change log

## v0.9
- Corrected a mistaken interfund transfer mapping in the verification script. The Emergency Management transfer of $8,700 belongs to General Fund account `01-392-051-00` (TRANSFER FROM EMERGENCY MGMT FD), not `01-395-020-00` (REFUNDS - PRIOR YR).
- All eight selected 2027 interfund transfer pairs now reconcile. The earlier $7,700 mismatch was **our mapping error**, not a discrepancy in the Borough budget.
- Added a reproducible verification script with assertions for duplicate account IDs and paired transfers.
- No account amounts changed; the v0.8 interface is carried forward. The 13 historical subtotal differences remain disclosed pending row-level review.

## Remaining release gates
- Full row-by-row PDF verification, including column positioning and descriptions.
- Historical subtotal reconciliation or clearly scoped disclosures.
- Verify bilingual labels and accessible charts.
- Validate property parcel dataset and full tax rates before address-based estimates.

## 1.0.0-rc.1 · 2026-10-08

- Recovered v0.9 and all three supplied 2027 source PDFs.
- Verified every account description, ID, PDF page and all 3,204 amount cells through independent coordinate-based extraction. No published account amounts changed.
- Added 18 source-extracted fund totals, 108 reproducible reconciliation checks and all 13 historical disclosures in the public UI.
- Added source fingerprints, original raw values, preserved PDF copies and bilingual CSV export.
- Rebuilt the interface around property taxes, fund selection, historical spending, category breakdowns and searchable account details. Preserved all six data periods.
- Added complete Spanish UI and descriptions for all 534 accounts. Switching languages restores the entire UI, not a subset of labels.
- Replaced the increase-only illustration with full current (11.8 mills) and proposed (12.8 mills) Borough taxes, annual increase and monthly equivalent.
- Built the Chester County parcel adapter with jurisdiction filtering, explicit selection, timeout/error handling, no owner fields, and safeguards for exempt/missing assessments. Live validation remains blocked.
- Disclosed the September/October scope mismatch and $238,440 Parking gap without changing either source.
- Added automated source, data, tax, translation, parcel and interaction tests. Added audit and unresolved-issue documents.
- No chatbot or advocacy copy added.
- Release candidate, not final public v1: live County lookup validation and rendered browser QA remain open.

### Español

Se verificaron las 534 cuentas y 3,204 cifras sin alterar los importes publicados. Se añadieron las conciliaciones, traducciones completas, archivos fuente, gráficos, detalles de cuentas y cálculos tributarios de 11.8 y 12.8 milésimas. Se divulgaron las diferencias históricas y entre versiones. Se implementó la consulta del condado con protecciones y pruebas automáticas. La publicación final sigue pendiente de verificar datos reales del condado y el diseño en navegadores.

## 1.0.0-rc.2 · 2026-10-08

- Restored the earlier approved visual foundation: blue accents, near-white background, white rounded cards, gray actual bars and blue proposed bars.
- Restored spending-first exploration. Tax calculations remain available; the unverified County address search is collapsed inside the tax section with a clear verification notice.
- Preserved the reconciled ledger, source links, bilingual text and full tax calculations.

### Español

Se restauraron las tarjetas blancas redondeadas, los acentos azules y los gráficos de la dirección visual anterior. Los gastos vuelven al primer plano. La búsqueda de direcciones aún no verificada está dentro de una sección desplegable de impuestos con una nota clara.

## 1.0.0-rc.3 · 2026-10-08

- Rebuilt the spending surface around the supplied Police card reference, rather than applying colors to an accounting dashboard.
- Added service cards with amount, percentage of fund, budget change and explicit spending-detail expansion. The first General Fund card is Police: $2.87M, 49.5%, -0.8% versus 2026 budget.
- Added Over time / Line items tabs inside each expanded card, four-year zero-based vertical charts, exact amounts, original account descriptions, source pages and calculation disclosure.
- Independently extracted 15 published General Fund department subtotals and verified full account coverage, without adjusting historical source discrepancies.
- Put aggregate accounting tables and global account searches behind disclosure controls. All nine funds remain accessible through the fund selector.
- Expanded automated validation to 20 tests, including the exact Police reference metrics and interaction flow.

### Español

Se reconstruyó la vista de gastos según la tarjeta de Policía suministrada. Cada tarjeta muestra el importe, la proporción del fondo y el cambio presupuestario. Al abrirla, se puede ver un gráfico de cuatro años, las cuentas individuales y las fuentes. Se verificaron 15 subtotales departamentales originales y 20 pruebas automáticas. No se modificaron cifras publicadas.

## 2026-10-08 · Resident journey update

Household impact now leads, using the Borough-published $430 annual average increase ($2,925 to $3,355), message page 2. The $508 application example remains separate under budget calculations. Property impact precedes spending; deeper totals and revenue move below the services explorer. Water, sewer and street explanations attribute the Borough’s rationale to message pages 5–6. Council document link verified through official search listing; direct fetch blocked. No meeting dates or public-comment rules claimed verified. Topic saving is deferred. Rendered browser and live parcel validation remain unfinished.

## 2026-10-08 · Interactive spending comparison

Added a source-backed multi-series line chart before spending cards. Service buttons highlight selected series; hover, tap and keyboard focus reveal exact amounts, dollar and percentage changes against the previous displayed period, and sources. Solid actual-to-actual segments and dashed budget comparisons explicitly distinguish measures. Only full-year periods 2024 actual, 2025 actual, 2026 adopted and 2027 proposed appear. The six-period selector is now an optional disclosure. Automated interaction tests cover selection and Police deltas. Real browser pointer/touch rendering remains unverified.

## 2026-11-03 · Explain change by household, fund and account

Added bilingual change explorer with household contribution stack ($168 sewer, $122 property tax, $100 water, $40 trash), fund-level diverging bars and expandable account-level differences, filters for spending/revenue, and original source links. All comparisons use 2026 adopted versus September 29 2027 proposed amounts. Null cells never become zero-based reported changes; incomplete comparisons appear separately. Combined nine-fund spending falls $1,543,124, including Water -$1,407,973; internal transfers remain included. Water funding changes and Sewer balance funding explain funding pressure without asserting a fully reconciled rate model. Sewer Borough use-charge revenue rises 8.3% ($1,380,000 to $1,495,000), while the message proposes 30%; this mismatch is unresolved and disclosed. Fire/EMS reorganization is explained without treating the new commission account as entirely new expense.

Publication status: November 2 agenda listed in official document center; no revised financial schedule established in the November 3 review. Retain draft dates and do not imply the app reflects November 2 decisions. Rendered browser QA and live County parcel verification remain open.

## 2026-11-03 · Fund history and utility allocation review

Replaced the long change-account list and fund dropdown with ten collapsed native accordions: combined total and nine funds. Each expands into four clearly labeled periods (2024/2025 actual, 2026 adopted, 2027 proposed), stacked expense composition, category/account histories, revenue histories, source links and original-total reconciliation. Secondary department and multi-series history tools are now collapsed.

Application grouping: explicit capital, reserve, debt, transfer and depreciation/net-pension accounts are separated; remaining expenses are running services. Every expense account belongs to exactly one group. Annual sums preserve published historical discrepancies and never relabel blanks as reported zero. Historical accounting adjustments are separate from running-service comparisons. Grouping is not a separately published operating statement.

Water 2026-to-2027 running-service grouping: $1,051,080 to $1,041,400 (-$9,680); capital $2,194,000 to $791,705; transfers $407,398 to $411,400. Message page 5 identifies a $316,705 capital reserve allocation, and presentation page 14 confirms projected operating surplus directed to reserves for grant matching. The ledger reserve lines are blank and does not locate the allocation within/separate from the capital account. Do not add $316,705 to $791,705, invent a project/reserve split, or infer historical reserve balances.

Sewer running-service grouping: $1,088,480 to $1,078,620 (-$9,860); capital $412,500 to $442,065; debt $796,145 to $798,400; transfers $363,924 to $368,800. Message page 6 and presentation page 15 support operating/capital need but do not quantify a separate reserve contribution. The reserve account is blank. Need a reserve-balance schedule, policy/targets and revised detail to quantify stock versus annual allocations and attribution of rate increases.

New official November 2 listing now exposes 20 documents, including re-listed September draft/October message plus draft tax ordinance and fee schedule. Direct attachment retrieval failed, so contents and adoption status are not verified and no rates were changed. Earlier one-document listing was incomplete at time of review. Browser visual QA remains open.

## 2026-11-03 · Resident funding story

Added a resident-first explanation directly after household impact: utility increases total $308 (72% rounded), property tax $122 (28%), using Borough averages. Shows current-year General/Emergency property-tax revenue $2,565,100 to $2,841,500 (+$276,400), distinct from the pure 1-mill rate effect and household tax average. General Fund accumulated-fund usage drops $668,976 to $2,000, a $666,976 funding reduction while spending falls $314,252. No claim that the tax increase alone replaces the difference.

Calculated nine-fund spending bridge: running services +$30,617; capital -$1,126,620; explicit reserve allocations +$100,013; debt -$262,152; transfers -$284,982; net -$1,543,124. These description-based categories reconcile to published 2026/2027 totals but are not consolidated operating statements. General running services -$64,942 includes fund shifts. Initial-request police reductions are explicitly not presented as savings against adopted 2026. Capital Fund 2024 actual $7,073,003 versus 2027 proposed $1,541,200 explains a large portion of the historical total decline; do not imply recurring tax savings.

Property calculator and headline rate detail moved into optional disclosures after the causal story/fund histories. Water/sewer funding explanations, reserve ambiguity and sewer-rate/revenue mismatch remain visible. No judgment about financial efficiency or sufficiency of rate rises. Original source figures unchanged. Browser visual verification remains open.

## 2026-11-03 · Chart alignment, contextual glossary and budget search

Aligned household labels/amounts to the same 308:122 column proportions as their segments, including mobile CSS. Added a shared 19-entry English/Spanish glossary with contextual popovers and links that open the full glossary. Search covers all 534 original accounts, explainers and definitions, with bilingual/accent-insensitive matching, exact-code priority, account history and PDF sources. It is deterministic local search, not generated answers.

Added downloadable budget-research-data.json with periods, full original records, totals, reconciliation, verification, bilingual glossary and explicit interpretation limits for reuse with analysis tools. No AI credentials, model calls, chat interface or public access change.

Desktop browser review now available: visually confirmed proportional household labels, searched water reserves, opened a contextual grant definition and followed its glossary link, and verified Spanish UI/definitions. This supersedes the blanket no-rendered-browser-check statement for these desktop flows only. Mobile viewport, 200% zoom, touch and live County selection remain unverified. Added initial deep-link reveal after data loading.
