An analysis, written by this project
Athletics: what it costs, who pays, and what the budget line does not say
The one programme where both sides of the money are visible, and therefore the only place the net-versus-gross problem can be measured rather than described.
lunenburgbudgetproject.org — written by the Lunenburg Budget Project, an independent tool for residents. Not affiliated with the Town of Lunenburg, the School Committee or the school district. The document this page renders: /docs/analyses/athletics.md
Working state:
notes/HANDOFF.mdcarries the current branch and what is established versus assumed.CLAUDE.mdcarries the rules. Fee revenue and fund balances are worked insped-and-funds.md§2.2 and are not restated here.
Analysis, August 2026. Part of the source archive.
Every section is written twice: In plain terms for anyone, and The evidence for anyone who wants to check it. The plain version never states anything the evidence does not support.
Verify every figure below with:
python3 scripts/verify_athletics.py
Why athletics needed its own document
Athletics is 1.7% of the school budget. By rule 4 — weight times excess rate — it is not a driver of the gap and never will be. It earned a document anyway, for two reasons.
The first is that it is the one program where the town has a real choice, and residents argue about it more than about anything else its size. A tool that helps somebody understand their options has to get this one right.
The second is the reason this document exists at all. Athletics is the only part of the budget where we can see both sides of the money. For every other line, the town publishes an appropriation and nothing else — no grants, no fees, no revolving funds. For athletics, one document published both, once, and a records request produced the fund's own year-end reconciliation. That makes athletics a test case for a question that applies to the entire budget: how far is an appropriation from what a thing costs?
The answer, here, is very far.
The approach
In plain terms. We stopped asking what athletics costs and started asking who is paying. That meant separating three kinds of document that all use the word "actual", and only one of which is a record of money moving.
The evidence. Every document in the archive is now classified in data/document-basis.csv, generated by scripts/classify_document_basis.py:
| type | what it means | count |
|---|---|---|
ledger | the accounting system — a figure exists because a transaction did | 10 |
restatement | a prior year re-presented inside a document written by the party that spent it | 65 |
forward | proposed, requested, level service, balanced | 172 |
narrative | money discussed, no figure table | 75 |
Of those ledger documents, exactly one reaches school budget lines on the general fund: district-budget/text/fy23-quarterly-budget-update.txt, covering one quarter of FY23. Everything else the school analysis rests on is restatement.
Three of the ten arrived after this document was written, on 17 June 2026, and they are the athletics revolving fund's own cashbook for FY2024, FY2025 and FY2026 — the first complete fiscal years of ledger data this project has held for anything touching school money. They are read in analyses/athletics-ledger.md, and several claims in the sections below are settled or sharpened there. The general fund still rests on one quarter of FY23.
This matters for athletics specifically because the two are not interchangeable, and the difference is visible on this very line — see §4 below.
1. The one document that shows both sides
In plain terms. Once, for FY19, the athletic director submitted a budget that listed every athletics line twice: once as money from the town, once as money from the fund the fees go into. It is the only document in the archive that does this. It shows that the town's athletics lines were never the whole cost.
The evidence. district-budget/docs/fy19-proposed-athletics-budget.pdf, off the district's own budget page, link live as of 2026-08-29, sha256 e0a7c5ba…. Titled Proposed FY19 MSHS Athletic Budget (Submitted to the Superintendent of Schools) AMENDED PROPOSED BUDGET.
Athletic Transportation appears on two consecutive lines — the appropriation, and the Chapter 658 revolving fund:
| FY | appropriated | revolving 658 | total | fund share | basis |
|---|---|---|---|---|---|
| 2014 | 17,000 | 30,085 | 47,085 | 63.9% | actual |
| 2015 | 21,600 | 40,742 | 62,342 | 65.4% | actual |
| 2016 | 23,000 | 33,308 | 56,308 | 59.2% | actual |
| 2017 | 23,000 | 50,986 | 73,986 | 68.9% | actual |
| 2018 | 33,500 | 27,450 | 60,950 | 45.0% | budgeted |
| 2019 | 24,975 | 40,000 | 64,975 | 61.6% | requested |
In every year it reports as actual, the fund paid more of athletic transportation than the town did.
The same document totals the whole program:
| FY14 | FY15 | FY16 | FY17 | FY18 | FY19 | |
|---|---|---|---|---|---|---|
| TOTAL GENERAL APPROPRIATION | 194,316 | 224,799 | 210,911 | 222,695 | 326,478 | 307,931 |
| plus TOTAL Revolving Fund 658 | 108,147 | 111,938 | 113,819 | 156,550 | 103,001 | 87,902 |
| GRAND TOTAL ATHLETICS | 302,462 | 336,738 | 324,730 | 379,245 | 429,479 | 395,833 |
| Total Revenues (Fees & Gates) | 110,474 | 140,748 | 121,555 | 109,351 | 108,000 | 108,000 |
Its own grand totals are $1 off its own two columns in FY14 and FY15 and exact in the other four years.
Credit where it is due, per rule 8. The district published this. It is the clearest account of how athletics is actually paid for anywhere in the record, and no document published since shows both sides. It is surfaced in the app for that reason.
And the district says the same thing in words. school-department-fy26-budget-overview lists "Revolving account offsets applied to personnel in local budget: Extended Day ($71,247), Facilities ($25,000)", and beside athletics: "156% line increase (reduced from Level Service with anticipation that athletic revolving may be enough to offset this reduction in the budget line)".
That is rule 11 in the district's own hand: the appropriation is set net of what the fund is expected to carry.
2. The netting swapped direction — it was not a withdrawal
In plain terms. People assume the town has been picking up costs the fees used to cover. That is half right. Transportation did move from the fund to the town — but officials and uniforms moved the other way at the same time, and they were about the same size. It was closer to a trade than a retreat.
The evidence.
| FY19 | FY26 | |
|---|---|---|
| transportation | revolving fund, $40,000 | general fund, $127,550 |
| officials | general fund, $40,117 | general fund $0; fund pays ArbiterSports $59,400 |
| uniforms | general fund, $8,000 | general fund $0; fund pays Prime Time Sports $25,421 |
In FY19 the general fund carried officials and uniforms together at $48,117 while the fund carried $40,000 of transportation. At the point of the trade the two sides were within about $8,000 of each other.
FY26 general fund figures are the FY26 FINAL BUDGET column of budget-workbooks/fy27-proposals.xlsx; ATHLETIC OFFICIALS and REPLACEMENT OF UNIFORMS are budgeted - from FY26 on. The fund vendors are budget-workbooks/school-funds-fy26.xlsx, sheet Athletics Revolving, A23.
3. The fund's share of athletics did not change
In plain terms. The fund pays about the same slice of athletics it paid seven years ago — roughly a fifth. What changed is which bills it pays, not how much.
The evidence.
| FY19 | FY26 | |
|---|---|---|
| general fund athletics | 307,931 | 518,334 |
| athletics revolving fund | 87,902 | 146,911 |
| whole program | 395,833 | 665,245 |
| fund share | 22.2% | 22.1% |
FY26 general fund is functions 3510 - Athletic Expenses + 3510 - Athletics Salaries from the FY26 FINAL BUDGET column. The fund figure is FY26 net expenditures from the year-end reconciliation.
What this does not show. Two observations, seven years apart, with nothing in the archive between them. Two points cannot show a line, and 22.2% against 22.1% could be coincidence. It is recorded because it contradicts an obvious story, not because it establishes a stable one.
The number that matters for the app. The whole FY26 athletics program is $665,245. Every athletics figure the app currently shows is the general fund portion.
4. What "athletic transportation actual" actually is
In plain terms. For years the reported spending on athletic buses came out exactly equal to the budget. That is not a coincidence and it is not sloppiness. The whole year's transportation is committed as a single purchase order at the start of the year, and the figure published later is that order — not a count of buses run.
The evidence. From the only ledger document that reaches school lines, fy23-quarterly-budget-update.txt, 11 November 2022:
S3066672 535016 TRANSPORTATION Original Budget 40,000.00 Revised Budget 40,000.00 Expended 0.00 Encumbrances 40,000.00 % Used 100.00
Nothing paid. The entire year committed. Regular transportation (535025) and special education transportation (535026) show the same shape in the same report.
Set against the restated actuals for the same line:
| FY | budget | reported actual | note |
|---|---|---|---|
| 2017 | 23,000 | 23,000 | exact |
| 2018 | 33,500 | 33,500 | exact |
| 2019 | 24,975 | 36,975 | |
| 2020 | 38,801 | 38,795 | |
| 2021 | 45,000 | 45,000 | exact — FY21 books were not closed, excluded elsewhere |
| 2022 | 45,000 | 48,755 | |
| 2023 | 40,000 | 39,880 | ledger: $0 expended, $40,000 encumbered at Q1 |
| 2024 | 40,000 | 40,000 | exact |
| 2025 | 40,000 | 87,822 | |
| 2026 | 127,550 | 47,847 spent + 13,169 encumbered at Q3 |
Four of nine usable years land on the budget to the dollar — three of eight if FY21 is excluded, as it is everywhere else in this project because its books were not closed.
A possible explanation, offered as a hypothesis. The line is managed by lump-sum encumbrance and the figure later published as an "actual" is the liquidated purchase order. That would make an exact match the expected result rather than an anomaly. Nothing here tests it — we hold one quarter of one year of ledger data. What would settle it: the year-end MUNIS report for the school department, or account detail history for object 535016.
And note the same word doing two jobs. The Finance Committee memo for the same quarter reports "Total General Fund expenditures through March 31, 2026, were $36.845 million". The ledger for that period says $34,219,013.80 expended and $2,626,115.87 encumbered — which sum to $36,845,129.67. The memo reports committed money under the word for money paid out. That is the same conflation as the line above, one level up.
4a. The FY25 deficit — reported, corroborated in outline, not established
In plain terms. Several people said in 2025 that the athletics fee account had run into trouble, and that costs landed on the town budget as a result. The account's own year-end figures do not show that, but we do not hold the year they are talking about. This is the most likely explanation on offer and it is not yet a fact.
The evidence, all of it. Three references, in one six-month window:
School Committee, 3 September 2025, public comment — the only place the account is named:
"in the past 6 months or so there have been things that have come up, athletic revolving fund was running in a deficit, I was told over $100,000"
This is a resident reporting what she was told. It is not a district statement, and no document we hold contains the figure.
Finance Committee, 8 July 2025 — a committee member, on the record, not naming athletics:
"Ms. Lockwood ... emphasized the need for all revolving accounts to have a budget, even if they are not town meeting revolving accounts, to prevent negative balances from going unnoticed."
Corroborates that a revolving account went negative and was not caught. Does not say which.
School Committee, 12 March 2025 — the day the FY26 budget was approved, public comment from a resident identifying as a finance professional:
"Splitting everything into revolving funds is not a good way to manage finances. We need to lay out all revenues and all expenses."
What the fund's own figures say. The athletics fund opened FY26 at +$110,247.89 on 1 July 2025 — which is its closing balance for FY25. So at FY25 year-end the account was positive, not $100,000 down. And FY26 ended at +$152,280.91 after a $42,033 surplus.
These are not necessarily in conflict. A fund can run a deficit mid-year on cash flow — seasons are paid for before fees are collected — and close positive. It can also be made whole by a transfer. We hold the endpoint and not the path: there is no FY25 fund report in the archive, only FY26's, which reports FY25's closing balance as its own opening one.
On the sequence, offered as a hypothesis. The dates fit a story, and only a story:
| when | what the documents show |
|---|---|
| 12 March 2025 | FY26 budget approved. Athletic transportation goes 40,000 → 102,550, and the budget overview says it was "reduced from Level Service with anticipation that athletic revolving may be enough to offset this reduction in the budget line" |
| spring–summer 2025 | the deficit is reportedly discovered |
| 8 July 2025 | Finance Committee raises negative balances going unnoticed |
| by 16 March 2026 | the FY26 final budget for the line is 127,550, up 25,000 from what was approved |
| 30 June 2026 | fund closes at +152,281, having gained 42,033 |
What this does not show, and it is the important part. The large rebase — 40,000 to 102,550, a 156% increase — happened in March 2025, before the deficit was reportedly discovered, and the district's own stated reason for the number it chose was that it expected the fund to carry more, not less. So the deficit cannot explain the rebase; at most it explains the later $25,000. A cost shift caused by a drained account is a coherent reading of some of this and is contradicted by the timing of most of it.
What would settle it: the FY25 special revenue report or fund balance sheet for fund 1301 — one document, and the same records request that produced the FY26 one.
5. Is $127,550 defensible?
In plain terms. It looks indefensible against the old budget line and ordinary against what athletic buses actually cost. Both are true, because the old budget line was never the cost.
The evidence. No document in the archive states a justification for the size of the line. Every statement about it explains a reduction. Measured against each base we have:
| base | value | ratio to 127,550 | implied rate |
|---|---|---|---|
| FY17 all-in (approp 23,000 + fund 50,986) | 73,986 | ×1.72 | 6.24%/yr over 9 years |
| FY14 all-in | 47,085 | ×2.71 | 8.66%/yr over 12 years |
| FY25 reported actual (appropriation only) | 87,822 | ×1.45 | 45.24% in one year |
| FY24 reported actual (appropriation only) | 40,000 | ×3.19 | 78.57%/yr over two years |
| FY26 committed at Q3 | 61,016 | ×2.09 | — spring still to run |
The district reports a 7.6% Dee Bus rate increase for FY26. Six and a quarter percent a year, compounded from the FY17 all-in figure, lands on $127,550.
What this does not show. The 6.24% is solved for, not sourced — we found the rate that reaches the number, we did not find it in a document. That it falls near the one published rate increase is corroboration, not proof.
6. UNPROVEN — a citizen's workbook, and what it would mean if it holds
Nothing in this section is acted on anywhere. No figure here feeds the model, the app, or any other section of this document. It is recorded because it is the only evidence that bears on the central question, and because if it holds it points the opposite way from what this project has been publishing.
In plain terms. A resident filed a public records request and got three years of the athletics general ledger, plus the district's own sport-by-sport file. They built a spreadsheet from it. That spreadsheet says athletic transportation cost about $117,000 in FY24 — a year the town's budget recorded $40,000. If that is right, the town's line was never the cost, and everything this project has said about that line being over-budgeted is backwards.
What the document is
Athletics_v10.xlsx, sha256 63fc34d428ea09d9db8129597666e0de02adc84a315223028a0430c2c76780d1. Workbook metadata: single author, created and last modified 2026-07-04 17:35:35.
It is not a town document. It is a third party's analysis built on two things obtained under M.G.L. c.66 — the athletics GL for three years, and a sport-by-sport file the district already held. That makes it a fourth kind of source, outside the three in data/document-basis.csv: not ledger, not a district restatement, not forward, but a derived model built on a ledger we do not hold.
We hold a copy. It is not published in the archive, because it is someone else's work product and permission has not been asked.
What in it is measurement and what is arithmetic
Its own cell A2 declares the answer, and the arithmetic confirms it exactly:
Fall 43,446.06 x 1.065 = 46,270.05 workbook says 46,270.05 Winter 29,377.50 x 1.065 = 31,287.04 workbook says 31,287.03 Spring 18,242.50 x 1.065 = 19,428.26 workbook says 19,428.24
The 25/26 column is the prior year escalated 6.5%. So is 26/27. Only 23/24 and 24/25 are observations — two of its four year-columns are model output, and they must never be quoted as data.
The finding
| FY | general fund | fund / other | total | fund share | source |
|---|---|---|---|---|---|
| 2014 | 17,000 | 30,085 | 47,085 | 63.9% | FY19 split doc |
| 2015 | 21,600 | 40,742 | 62,342 | 65.4% | FY19 split doc |
| 2016 | 23,000 | 33,308 | 56,308 | 59.2% | FY19 split doc |
| 2017 | 23,000 | 50,986 | 73,986 | 68.9% | FY19 split doc |
| 2018 | 33,500 | 27,450 | 60,950 | 45.0% | FY19 split doc, budgeted |
| 2019 | 24,975 | 40,000 | 64,975 | 61.6% | FY19 split doc, requested |
| 2020–2023 | — | — | — | not published | |
| 2024 | 40,000 | 77,555 | 117,555 | 66.0% | workbook — unproven |
| 2025 | 87,822 | 3,244 | 91,066 | 3.6% | workbook — unproven |
Two documents with nothing in common, a decade apart, agree that the fund carried about two-thirds: 59.2%–68.9% across FY14–17, and 66.0% in FY24. Then FY25 is 3.6%.
Not a drift and not the trade described in §2 — a single-year transfer of roughly $77,000 of annual cost from fee payers onto the town.
What it would resolve
Three things this document could not otherwise explain, all resolved by the same fact:
- FY25's $87,822 against a $40,000 budget. §4 records that as the one real miss on this line. It would not be a miss. It would be the town paying the whole bill for the first time, against a budget sized for its share.
- FY24's actual being exactly $40,000. §4 offers lump-sum encumbrance as a hypothesis. This does not compete with it — it completes it. The appropriation was capped at its purchase order and the remaining $77,555 was carried elsewhere.
- Why $127,550. §5 finds the line defensible against the all-in cost and absurd against the appropriation. This says the all-in cost was $91,066–$117,555 in the two observed years, and the line is the first one sized to it.
What it would mean for the app — and why that matters most
The FY27 line-item note on athletic transportation, shipped in the deployed v3 build, reads:
"Budgeted well above what athletics has ever actually spent. Actuals were $39,880 (FY23), $40,000 (FY24) and $87,822 (FY25)…"
If the workbook holds, $40,000 in FY24 was 34% of what athletics actually spent. That sentence takes the town's share, calls it what athletics spent, and concludes the budget is padded. It is rule 11 broken in one sentence, in public, and it accuses the district of over-budgeting a line that may be the only honestly sized one in the section.
Note the direction. notes/HANDOFF.md §2 says the app overstates athletics costs by double-counting fee revenue. On this evidence the app understates the cost of athletic transportation. Both cannot be the shape of the error, and neither is settled.
Why this is not acted on
- It is one unsourced spreadsheet. We hold the analysis, not the ledger under it.
- It is internally inconsistent.
Summary!I41(Spring 25/26 revenue) is75,275.00, identical to the cent toI17(Fall) — two seasons cannot match exactly. The season sheets' ownTotalrows are incomplete: Fall's 25/26 fee total reads 0, Spring's transportation totals read 0 in two years, and summing the sport rows gives different answers than the total rows do. Column layouts and header names differ across the three sheets —Total Receivedon Fall againstTotal Fees Receivedon Spring, Transportation atARon Fall andASon the others. - **We cannot tell which figures came from the GL and which from the district's sport-by-sport file.** They are fused in one workbook and have different reliability.
- It does not say why the fund stopped paying. A fund that ran out looks different in a ledger from one that was redirected, and §4a's reported FY25 deficit is only one of the readings. The others are a deliberate policy change, or a change in what Town Meeting authorised the fund to spend on.
Why FY25 and not the seven years before — the fund never had slack
The obvious objection to the table above is that a fund which carried two-thirds of transportation for a decade does not simply stop. The FY19 document answers it: the fund was never comfortable. It ran within a few percent of break-even every year, and it has shed a major obligation once before under exactly this pressure.
Fund 658's own costs and revenue, from the FY19 split document:
| FY | coaches | secretary | supplies | transport | fund cost | fees + gates | margin |
|---|---|---|---|---|---|---|---|
| 2014 | 45,278 | — | 31,894 | 30,085 | 107,257 | 110,474 | +3,217 |
| 2015 | 27,221 | 5,245 | 38,730 | 40,742 | 111,938 | 140,748 | +28,810 |
| 2016 | 40,092 | 7,796 | 32,623 | 33,308 | 113,819 | 121,555 | +7,736 |
| 2017 | 34,815 | 8,594 | 37,156 | 50,986 | 131,551 | 109,351 | −22,200 |
| 2018 | 0 | 5,437 | 27,114 | 27,450 | 60,001 | 108,000 | +47,999 |
| 2019 | 0 | 5,593 | 28,309 | 40,000 | 73,902 | 108,000 | +34,098 |
The fund went negative in FY17, and in FY18 it dropped coaches entirely — from $34,815 to zero — and the margin went from −$22,200 to +$47,999. That is the same move as FY25, a decade earlier, in a document the district published itself.
And the workbook, if it holds, shows the same shape:
| FY | officials | transport | fund cost | fees | margin |
|---|---|---|---|---|---|
| 2024 | 51,570 | 77,555 | 129,125 | 128,252 | −872 |
| 2025 | 50,696 | 3,244 | 53,940 | 117,069 | +63,129 |
Officials cost the fund about $51,000 a year, and the general fund budgeted $0 for officials from FY24 on. So FY24 is the year the fund took on a new obligation roughly the size of its entire margin. It landed at −$872 — break-even to within a thousand dollars, on a $128,000 fund. FY25 it shed transportation and the margin returned.
So the answer to "why that year" is that nothing about transportation changed. What changed is what else the fund was asked to carry. A fund with no margin absorbs a new obligation only by dropping an old one, and this fund has now done that twice: coaches in FY18, transportation in FY25.
A possible trigger, offered as a hypothesis. FY24 is the first year in the grants record with no ESSER money — data/grants-history.csv shows ESSER running through FY23 and stopping, about half a million a year. The general fund was under pressure in exactly the year officials moved off it. Nothing here tests that, and the correlation is one year against one event. What would settle it: the FY24 general fund athletics detail showing where the officials line went, which is in the GL already requested.
And it reframes "drained". A fund sitting at −$872 on $128,000 of revenue is one late invoice or one slow collection month away from a visible negative balance. "The fund was drained" and "the fund was at break-even and given something new to pay for" are the same arithmetic described with different blame attached. The second is what the numbers show. Neither is established.
What would settle it
The raw GL, requested 29 August 2026: the general fund athletics org S3066672 (especially object 535016) and fund 1301, both as native export rather than PDF, plus the RevTrak receipts detail and the district's original sport-by-sport file. Recorded in notes/DATA-WANTED.md §3c.
If it arrives and holds, the first work is not to publish the new number. It is to stop the deployed note asserting the old one.
How to reproduce every figure in this document
Nothing here rests on a step that is not written down. Each source is named by its path in the published archive, its sha256, and — where a figure comes from a spreadsheet — the sheet and cell or column it comes from.
Run the verifier first. It recomputes every figure below from the sources and fails if one drifted:
python3 scripts/verify_athletics.py
The sources
| file | sha256 (first 16) | what is taken from it |
|---|---|---|
district-budget/docs/fy19-proposed-athletics-budget.pdf | e0a7c5baa041112c | §1, §2 — the FY19 split, all six years, both columns |
budget-workbooks/fy27-proposals.xlsx | 94184d3b167a6e80 | §2, §3, §5 — FY26 general fund athletics; the transportation line |
budget-workbooks/school-funds-fy26.xlsx | 2662ca779de6170d | §2, §3, §4a — the fund's FY26 year-end reconciliation and vendors |
munis-ledgers/fund-balances/special-revenue-fy2026-p09.xlsx | 4b9777d83c747c1c | §4a — fund 1301 as the town books it |
district-budget/docs/fy23-quarterly-budget-update.pdf | 6fb1e3a1b304e64d | §4 — the only ledger view of a school line |
munis-ledgers/expenses/glytdbud-expense-fy2026-p09-gf-all.pdf | 5875562be5ee615f | §4 — the ledger behind the Finance Committee memo |
Minutes cited in §4a: minutes/school-committee/2025-09-03-minutes-7385, minutes/finance-committee/2025-07-08-minutes-7295, minutes/school-committee/2025-03-12-minutes-7098.
Where each figure lives
§1, the FY19 split. Text extraction of the PDF, lines 16 and 17. The line labelled Athletic Transportation is the appropriation; the line labelled Athletic Transportation (685) is the revolving fund — (685) is a typo for (658), consistent with the same document's plus TOTAL Revolving Fund 658 on line 31. Column headers are on lines 4 and 5: FY14 FY15 FY16 FY17 FY18 FY19 over Actual Actual Actual Actual Budgeted Requested. Transcribed into model/athletics.py → SPLIT_REPORTING and rendered in the app.
grep -n 'Athletic Transportation' \ sources/district-budget/text/fy19-proposed-athletics-budget.txt
§2 and §3, FY26 general fund athletics. budget-workbooks/fy27-proposals.xlsx, sheet FY27 Budget Projection, column G (FY26 over FINAL BUDGET, cells G4/G5), summed over every row whose function header in column A begins 3510 — that is both 3510 - Athletic Expenses and 3510 - Athletics Salaries. Function headers are rows where column A matches ^\d{4}\s*-.
Read the workbook by cell reference, not by opening it. Nine columns are hidden — C, H, I, N, O, P, T, U, V — including C (FY23 ACTUALS), H (FY26 actuals to date) and I (FY26 encumbrances to date). They do not appear on screen. Our second copy, budget-workbooks/fy27-budget-projection-3-25-26.xlsx, is data-identical and hides a different set, so the two files show a reader different tables. data/document-basis.csv records the hidden set for every workbook in the archive.
§2 and §3, the fund. budget-workbooks/school-funds-fy26.xlsx, sheet Athletics Revolving. Vendors are a single text cell, A23. The expenditure categories are A19–A22; note that A20 names transportation inside purchase of service. The roll-forward is B5–B8.
§3, the FY19 programme totals. Lines 30–32 of the same text extraction. Its stated grand totals are $1 off its own two columns in FY14 and FY15 and exact in the other four years; the verifier asserts that rather than hiding it.
§4, the ledger view. Text extraction, the row beginning S3066672 535016. S3066672 is the athletics expense org; 535016 is the transportation object code. The same object appears under three other orgs in that report, which is why the org code matters.
§4, the memo's arithmetic. munis-ledgers/expenses/glytdbud-expense-fy2026-p09-gf-all.txt, the GRAND TOTAL line. Extracted by scripts/extract_town_ledger.py, which reconciles its output to that printed total before it will write.
§5, the implied rates. Solved, not sourced: the compound rate that carries each base to $127,550 over the years between. (127550 / base) ** (1 / years) - 1.
The classification behind the method
python3 scripts/classifydocumentbasis.py # writes data/document-basis.csv
Every document in the archive by what produced its figures — ledger, restatement, forward, narrative — each row quoting the raw header text the call rests on, with its line number or cell reference. The counts in "The approach" above come from it.
A caution about method, learned here
Every serious error in building this document was the same one: reading a rendering instead of the source. A concatenated header quoted as though the sheet said it. A hidden column read as though a reader could see it. A budget workbook's ACTUALS column described as an actuals document. A verifier that checked a sentence was present rather than that its count was right, and passed while the count was wrong.
So: quote cell references and raw text, never a rendered label; check what a reader actually sees, not only what the file contains; and make a check assert the number, not the prose around it.
7. Both sides, every year we can see either one
In plain terms. This is the whole picture in one place: what the town appropriated for athletics, and what the fee-funded revolving account paid, line by line, for every year either is visible. The blank stretch in the middle is the point — for four years nobody published the fund side at all.
The evidence. Generated from data/athletics-history.csv by scripts/extract_athletics_history.py. The FY14–FY19 reconstruction is checked rather than asserted: the itemised rows are summed against the document's own stated column totals, and five of six years tie to the dollar on each side. The two that do not are the document's own rounding — FY16 general by $2, FY17 revolving by $1 — and the script fails if any year is off by more than that.
General fund appropriation
FY14–FY19 from the FY19 athletics document; FY20–FY25 actuals from data/line-history.csv; FY26 is the FY26 FINAL BUDGET column.
| line | FY14 | FY15 | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | FY26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Athletic Coaches | 114,636 | 130,661 | 120,646 | 130,020 | 163,146 | 150,636 | 91,601 | 139,492 | 145,991 | 100,351 | 46,733 | 155,614 | 159,444 |
| Athletic Director | — | — | — | — | 48,000 | 49,440 | 90,000 | 91,800 | 103,752 | 85,977 | 90,200 | 96,044 | 74,406 |
| Athletic Transportation | 17,000 | 21,600 | 23,000 | 23,000 | 33,500 | 24,975 | 38,795 | 45,000 | 48,755 | 39,880 | 40,000 | 87,822 | 127,550 |
| Athletic Officials | 39,875 | 40,469 | 38,997 | 38,059 | 39,221 | 40,117 | 201 | 21,148 | 47,967 | — | — | — | — |
| Athletic Trainer | — | — | — | — | — | — | — | — | — | 51,660 | 61,800 | 63,900 | 66,200 |
| Athletic Dues & Fees | 9,519 | 9,759 | 9,751 | 10,782 | 12,499 | 12,529 | 22,290 | 20,623 | 20,789 | 22,251 | 18,486 | 31,995 | 20,000 |
| Special Detail/Athletic Events | 444 | 5,559 | 139 | 1,592 | 5,900 | 5,344 | 9,773 | 5,000 | 5,897 | 3,705 | 5,807 | 72,864 | 7,100 |
| Athletic Insurance | 5,990 | 5,990 | 5,990 | 5,990 | 5,990 | 5,990 | 5,990 | 5,990 | 8,980 | 8,980 | 8,980 | 8,980 | 9,000 |
| Athletic Equipment/Reconditioning | 3,065 | 4,361 | 5,265 | 157 | 4,500 | 4,500 | 5,898 | 10,000 | 4,897 | 1,932 | 7,602 | 7,190 | 10,000 |
| Athletic New Equipment | — | 1,440 | 5,456 | 5,151 | 5,850 | 6,400 | 4,498 | 5,850 | 5,188 | 5,648 | 5,673 | 9,055 | 6,000 |
| Athletic Replacement of Uniforms | 3,787 | 4,960 | 1,669 | 7,944 | 7,872 | 8,000 | 10,560 | 7,872 | 1,690 | — | — | — | — |
| Athletic Secretary | — | — | — | — | — | — | — | — | — | — | — | — | 20,407 |
| Freshman & Ms Coaches | — | — | — | — | — | — | — | — | — | — | — | — | 14,415 |
| Athletic Expenses/Supplies | — | — | — | — | — | — | 11,243 | — | 834 | — | — | — | — |
| Unified Sports Coach | — | — | — | — | — | — | 1,200 | 3,925 | 1,200 | — | — | — | — |
| Unified Sports,Track/Basketball Coach | — | — | — | — | — | — | — | — | — | — | — | — | 3,812 |
| total | 194,316 | 224,799 | 210,913 | 222,695 | 326,478 | 307,931 | 292,049 | 356,700 | 395,940 | 320,384 | 285,281 | 533,464 | 518,334 |
Chapter 658 revolving fund — where the fees go
FY20–FY23 is blank because nothing was published, not because the fund paid nothing. FY24 and FY25 carry only two lines, both from the unproven workbook of §6 — the fund certainly paid for more than officials and transportation in those years. FY26 is the fund’s own year-end reconciliation.
| line | FY14 | FY15 | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | FY26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Athletic Transportation | 30,085 | 40,742 | 33,308 | 50,986 | 27,450 | 40,000 | — | — | — | — | 77,555 | 3,244 | — |
| Athletic Expenses/Supplies | 31,894 | 38,730 | 32,623 | 37,156 | 27,114 | 28,309 | — | — | — | — | — | — | — |
| Athletic Coaches | 45,278 | 27,221 | 40,092 | 34,815 | — | — | — | — | — | — | — | — | — |
| Purchase of service (officials, uniforms, transportation, ice time, dues) | — | — | — | — | — | — | — | — | — | — | — | — | 113,602 |
| Athletic Officials | — | — | — | — | — | — | — | — | — | — | 51,570 | 50,696 | — |
| Track and Field Payment | — | — | — | 25,000 | 40,000 | — | — | — | — | — | — | — | — |
| Athletic Secretary | — | 5,245 | 7,796 | 8,594 | 5,437 | 5,593 | — | — | — | — | — | — | — |
| Salaries (4 revolving-fund staff) | — | — | — | — | — | — | — | — | — | — | — | — | 30,514 |
| Field upgrades / turf | — | — | — | — | — | 10,000 | — | — | — | — | — | — | — |
| Athletic New Equipment | 890 | — | — | — | 3,000 | 4,000 | — | — | — | — | — | — | — |
| General supplies | — | — | — | — | — | — | — | — | — | — | — | — | 2,795 |
| total | 108,147 | 111,938 | 113,819 | 156,551 | 103,001 | 87,902 | — | — | — | — | 129,125 | 53,940 | 146,911 |
Both sides, and the distribution
| FY14 | FY15 | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | FY26 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| general fund | 194,316 | 224,799 | 210,913 | 222,695 | 326,478 | 307,931 | 292,049 | 356,700 | 395,940 | 320,384 | 285,281 | 533,464 | 518,334 |
| revolving fund | 108,147 | 111,938 | 113,819 | 156,551 | 103,001 | 87,902 | not published | not published | not published | not published | 129,125 partial | 53,940 partial | 146,911 |
| all in | 302,463 | 336,737 | 324,732 | 379,246 | 429,479 | 395,833 | ≥ 292,049 | ≥ 356,700 | ≥ 395,940 | ≥ 320,384 | ≥ 414,406 | ≥ 587,404 | 665,245 |
| fund share of all-in | 36% | 33% | 35% | 41% | 24% | 22% | — | — | — | — | ≥ 31% | ≥ 9% | 22% |
| fund revenue (fees, gates) | — | 135,767 | 121,456 | 108,551 | 108,000 | 108,000 | — | — | — | — | — | — | 188,944 |
Read the blanks as the finding. FY20–FY23 shows no fund side because no document published one, not because the fund paid nothing — it certainly did. FY24 and FY25 carry two lines only, both from the unproven workbook. So the all-in row is a floor for six of thirteen years, and the fund's share is understated wherever it is marked ≥.
What the visible years show. Where both sides are published — FY14–FY19 and FY26 — the fund carries between 22% and 41% of all-in athletics, and it is the composition that moves rather than the share: coaches and supplies early, transportation throughout, and by FY26 officials, uniforms and video. The one thing that does not appear on the general fund side in any year is the fund itself.
Conclusions
- **An athletics appropriation is not what athletics costs, and the district has said so twice** — once by publishing both columns in FY19, once in words in the FY26 budget overview. Rule 11 is not a suspicion about this line. It is documented.
- The whole FY26 athletics program is $665,245, of which the general fund carries $518,334 and the fee-funded revolving fund carries $146,911.
- The fund's share is unchanged across the only two years we can compare — 22.2% in FY19, 22.1% in FY26. The town did not absorb a retreating fund. Transportation and officials/uniforms traded places at comparable size.
- $127,550 is not the outlier it appears to be, once measured against the all-in cost rather than against an appropriation that excluded the fund's larger share.
- The reported actuals on this line are encumbrances, not payments, at least in the one year we can see. Any rate measured off them measures commitment, not spending.
- No document in the archive names a carrier beside a dollar figure for athletics. The only actual payment to Dee Bus recorded anywhere is $731.50 for a single field trip, in School Committee minutes of 4 March 2026.
Open questions
On funding
- Whether the general fund transportation line is still net of anything today. The FY26 fund's unnamed purchase-of-service residual is $4,099, which caps any bus payment it could be making — but that is a ceiling, not a measurement.
- When transportation moved from the fund to the appropriation, and whether in one step. Nothing between FY19 and FY25 shows the split.
- Whether the FY19 split format continued and simply stopped being published. Nine department-level submissions exist for FY19 and none for any other year.
- Whether the athletics fund ran a deficit in FY25, and how large. Reported in public comment as "over $100,000" and corroborated in outline by the Finance Committee, but the fund closed FY25 at +$110,248 and no FY25 fund report exists in the archive. See §4a. This is the single most likely explanation for a cost shift onto the town and it is not established. The FY25 special revenue report for fund 1301 would settle it.
On cost
- What athletic transportation actually cost in any year. Every figure we hold is a budget, an encumbrance, or a restatement of one of those.
- The FY26 year-end figure for the line, which would settle whether $127,550 was right.
On fees — worked in sped-and-funds.md §2.2, restated here as open:
- Why the fund collected $188,944 net in FY26 when the app's model of the same fee produces $130,129. Implied per participation is $287.82 high school and $248.60 middle school, against a stated first-child fee of $250. Either participations are undercounted or there are sport surcharges we do not hold.
- Whether the $152,281 fund balance is committed to anything. It is a balance, not a windfall, and revolving spending is capped by annual Town Meeting authorisation.
The one request that would answer the most
The vendor warrant — the list of bills the Select Board approves for payment, itemised by vendor. It is a public record produced roughly weekly, and it is the only document that would put a carrier's name beside an amount. Failing that, the account detail history for object 535016.
What this changes in the app
Not yet done. In order:
model/athletics.pyassertsFEE_REVENUE_IN_BUDGET = Falseon the reasoning that fees flow through revolving accounts so the budget figures are gross. The mechanism is the opposite: fees pay for officials and uniforms, and those lines are budgeted$0in the general fund. The figures are net because the cost never appears.- The fee curve's base should be the whole program, $665,245, not the general fund portion — and it must count the $146,911 the fee already pays.
estimatedFy26Revenueis 31% below what the fund reports collecting. The $960 self-funding fee andfeeIncreaseValueare calibrated off it.FEE_ACCOUNTINGinfers that athletics fees sit under M.G.L. c.71 §47 from their absence from the §53E½ warrant article. The town books the fund as `1301 CHAPTER 658 REVOLVING FUND`. The inference can be replaced with the fact.- Conclusion 5 — "athletics cannot pay for itself once you put the buses back" — rests on all of the above and should not be restated until they are fixed.
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. Every figure in it is recomputed from the underlying data by python3 scripts/verify_athletics.py, which fails rather than warns.
Every other report
Every analysis this project has written, in one index, is at reports.