An analysis, written by this project

The annual town reports

The sixteen annual town reports, FY2011–FY2025, every one downloadable with the sha256 of the bytes we hold — and what we read out of them, by category. Says plainly which pages tie to a total the page itself prints and which carry figures nothing has ever checked, because those are not the same thing.

16
annual town reports, FY2011–FY2025
477
pages holding a financial table
208 of 477
pages tied to a total the page prints
23,639
rows read out of them

What this report counts

One row per page of an annual town report that holds a financial table, and the datasets read out of those pages. A page is counted once per report; a figure is counted once per row.

01477pages holding a financial table

All 477 pages holding a financial table have been read.

None is unread, so the work left is checking rather than reading.

Sixteen documents, opened page by page. A page counted here is one that holds a financial table, not every page of the book.

What it rests on `annual-report-pages.csv`, which is generated from what the extractors actually wrote and refuses to publish a count off a stale database.

What it does not show Whether a page holds a table we have not recognised as financial. The classifier reads headings, and the pages whose heading did not classify are filed as `unknown` rather than dropped.

02208pages tied to a printed total

208 of 477 pages tie to a total the page itself prints.

The other 269 carry real figures that no arithmetic has confirmed.

A page is PROVEN only where the table states an identity about itself -- parts summing to a printed total -- and the extract closes it. Most tables here print no total, so there is nothing to close.

What it rests on the `state` column of `annual-report-pages.csv`, set from the proof each extractor recorded rather than from whether it produced rows.

What it does not show That an UNPROVEN figure is wrong. It means nothing has checked it, which is a different claim and the reason the column exists.

0377pages with no check

Appropriations is the least checked: 77 of its 95 pages have no check at all.

It is also the category a resident is most likely to quote.

These pages print what Town Meeting voted, article by article. 17 of them do tie to a printed total; the rest are read and unconfirmed.

What it rests on `annual-report-pages.csv` grouped by subject and state.

What it does not show Which of those pages COULD be checked. A page printing no total can never reach PROVEN however good the extractor gets.

Those are the answers this report could reach from the documents behind it. If the one you came for is not among them, ask us — no name or email needed.

Sixteen documents, 477 pages of financial tables, 23,639 rows read out of them.

The sixteen reports

Every one is downloadable, and every one carries the sha256 of the bytes we hold, so a figure can be traced to the page it came from and the page to the file.

fiscal yeardocumentsizedownloadsha256
FY20114117-fy-2011-annual-town-report.pdf30.2 MBdownload551f9edd75d051ae…
FY20124118-fy-2012-annual-town-report.pdf54.0 MBdownload75d645ee7055f68c…
FY20134119-fy-2013-annual-town-report.pdf36.1 MBdownload00670845b7d32216…
FY20144120-fy-2014-annual-town-report.pdf5.5 MBdownloadf5ef6e9aec7866f7…
FY20154121-fy-2015-annual-town-report.pdf7.2 MBdownload712afbb458b2a452…
FY20164123-fy-2016-annual-town-report.pdf5.2 MBdownloadf13af7a7c78d4a14…
FY2016 addendum4122-fy-2016-annual-town-report-addendum.pdf2.1 MBdownloadb354a3941e2451f7…
FY20174124-fy-2017-annual-town-report.pdf35.4 MBdownload4c6fbf70d0aff247…
FY20184125-fy-2018-annual-town-report.pdf7.7 MBdownload364a1138df754668…
FY20194126-fy-2019-annual-town-report.pdf8.9 MBdownload220f1c778148feb9…
FY20204127-fy-2020-annual-town-report.pdf19.6 MBdownloadc3bf67f1259a5c19…
FY20214128-fy-2021-annual-town-report.pdf78.8 MBdownload7ec4740034a2b9bd…
FY20224129-fy-2022-annual-town-report.pdf16.1 MBdownloadd1673d634dba15c2…
FY20234131-fy-2023-annual-town-report.pdf17.4 MBdownloadd273ebb71360e30d…
FY20244132-fy-2024-annual-town-report.pdf49.8 MBdownload46f14ff8459ec81f…
FY20254130-fy-2025-annual-town-report.pdf6.9 MBdownloada9ee7b51154d94fd…
Read the rest of the analysisThe full version4 min

The other findings

0117datasets read generically

17 of the 24 datasets are read by a generic extractor that cannot name its columns.

Read `column_meaning` before quoting a value from one of those.

The generic extractor records a column as `v1`, `v2`, `v3` -- an ORDINAL, the first column of THAT page that held figures. The ruler is rebuilt per page, so the same name means different columns on different pages.

What it rests on the dataset inventory in `scripts/build_archive_guide.py`, read here rather than restated, so the two cannot disagree.

What it does not show Which printed column a given `v1` is on any particular page, except where `column_meaning` names it from an identity the table states about itself.

What is in them, by category

proven means the rows tie to a total the page itself prints. unproven means the rows exist and nothing has checked them — not that they are wrong. refused means an extractor reached the page and wrote nothing.

categorywhat it answerspagesprovenunprovenrefused
appropriationswhat Town Meeting voted to spend, article by article9517771
special revenuethe funds that sit outside the budget — grants, gifts, revolving6853150
payrollwhat the town paid its people, name by name655591
debtwhat the town owes and when it falls due4614311
trust and stabilizationthe reserves, and how much is in each3925131
receivableswhat is owed TO the town, account by account281873
unknowna financial table whose heading we could not classify2712150
tax collectionwhat was committed, collected and abated219111
regional schoolthe assessment from the regional school district182151
balance sheetwhat the town held and owed at year end171610
valuationwhat the town is worth, by class of property16880
treasurers cashthe cash the Treasurer held151401
capitalthe capital projects and what they cost131030
enrollmenthow many children are in the schools6420
electionshow the town voted2110
cultural councilthe grants the cultural council made1010
total47720825910

By report

fiscal yearpagesprovenunprovenrefused
FY20112810171
FY20122710161
FY2013298201
FY20142714130
FY20153113180
FY20164112290
FY20173314163
FY20183517180
FY20193811261
FY20203916221
FY20213716210
FY20223318150
FY20233415172
FY20242211110
FY2025232300

The datasets read out of them

A dedicated extractor knows what its table means and can check it against a total the page prints. The generic one cannot: its v1…v8 are ORDINALS — the first, second, third column of that page that held figures — and the ruler is rebuilt per page. Read column_meaning before quoting one.

datasetrowsyearsbuilt bycheckedcheck failedno check
report-appropriations.csv5,3452011–2025generic31150340
staff-roster-entries.csv3,7512011–2025dedicated———
report-gross-wages.csv3,5472011–2025generic003547
special-revenue-funds.csv2,4222011–2025dedicated1722098151
report-elections.csv2,0122011–2025generic32316881
annual-report-receipts.csv1,1372011–2023dedicated50485548
staff-roster-counts.csv6982011–2025dedicated———
report-index.csv6522011–2025generic———
report-trust-funds.csv6442011–2025generic12418214
report-capital-projects.csv6182011–2025generic4854426
staff-position-map.csv525—dedicated———
report-dept-activity.csv5152011–2025generic00515
report-debt.csv3662011–2025generic7599192
report-enrollment-mcas.csv3382011–2025generic00338
report-valuation.csv3212011–2019generic00321
report-officials.csv2372011–2024generic00237
report-signatures.csv1822013–2025generic———
report-filing.csv104—generic———
report-vital-records.csv962011–2025generic0096
report-monty-tech.csv702017–2017generic0070
report-appropriations-supplement.csv32—generic———
placement-counts.csv152011–2025dedicated———
ballot-questions.csv92012–2025dedicated———
report-appropriations-supplement-refused.csv3—generic———

What this does not establish

  • That an UNPROVEN figure is wrong. Nothing has checked it.
  • What a generic v1 column is on any page where column_meaning says not established.
  • Whether a page we filed as unknown holds a table worth reading.

Limits that cannot be closed by better code are registered in sources/data/money-gaps.csv and published at /what-we-cannot-answer.

Where these figures come from

whatwhere
The sixteen reports themselves/docs/town-annual-reports/docs/, each with its sha256 in /data/archive-manifest.csv
What is on each page and what proved it/data/annual-report-pages.csv
What a column means before you quote itsources/data/PROVENANCE-report-tables.md and column_meaning

Where this came from

Nothing on this page is an official document. It was written here, from documents the town and district published and from records obtained by request, and it has not been reviewed or endorsed by the Town of Lunenburg, the School Committee, the Finance Committee or Lunenburg Public Schools. The report index says the same thing at more length, and lists every analysis alongside the data underneath it.

This page renders the document itself, which is the source of truth: there is one copy of every sentence and every figure here, not a transcription of one.

Markdown1,450 words8 KBlast changed 2026-09-28sha256 429480a2e6b26196…

Every other report

The budget feed — every board, everything about money →What the town is deciding now →The blog — one finding at a time, in two minutes →This week in town — meetings coming up, minutes and recordings just posted →The boards — each one, in one place →Meeting minutes — written from the recordings →Lunenburg by the numbers — who lives here →Lunenburg’s homes and the tax bill →Homes and students — the town builds, the schools do not grow →The boards, compared →Youth sports and the fields →The School Committee’s finances — every fund and line it owns →Parks & Recreation — the department, its fund, its sales, its grounds →Health insurance →Free cash — can it fill the gap? →Teacher contracts →School user and athletic fees →Extracurriculars — sports, music and clubs →Classroom positions and class size →Overrides →Commercial development and new growth →Special education — four reports →How many students one special education group may have →The circuit breaker — what the state reimburses for the costliest placements →What other districts spend, for each pupil →What the state requires us to spend — and where that puts us →Chapter 70 — the formula, and why it pays the floor →How Chapter 70 actually works, in eight steps →School staffing — did it go up, and over which years →Who works in each school →The paraprofessionals →What courses actually ran, subject by subject →AP exams — who sits them, in what, and how they score →The cut register — what was announced, and what shows →Funding that stopped →When a grant ends — who picks up the bill →Who is in the schools — enrolment, FY1994 to today →Which grades students leave in →Who leaves Lunenburg schools, and where they go →Monty Tech — the assessment, and what sets it →If students leave — what school choice would cost →What a family actually pays →What sports cost, and who pays →Health insurance — the cost outside the school budget →Budget against reported spending →

Every analysis this project has written, in one index, is at reports.

What changed

Version 15 — updated September 20, 2026