{"generated":"2026-09-05","caveat":{"headline":"Written by this project, not by the town or the district.","body":"Nothing on this page is an official document. These analyses are written here, from documents the town and district published and from records obtained by request. They have not been reviewed or endorsed by the Town of Lunenburg, the Lunenburg School Committee, the Finance Committee or Lunenburg Public Schools, and this project is not affiliated with any of them.","checkable":"Every figure in an analysis is recomputed from the underlying data by a script, and the script is named on the row. The data itself is published below \u2014 you do not have to take any of this on trust, and you should not.","corrections":"Where an earlier version of an analysis was wrong, the correction stays in the text rather than being edited out. Several of these documents describe their own earlier errors."},"reports":[{"id":"fy26-closeout","title":"FY26, as the books stood in June","about":"The school department\u2019s FY26, read line by line from the town\u2019s own ledger. What the $482,101 headline actually is, and three things it cannot explain.","words":8808,"updated":"2026-09-03","markdown":{"url":"/docs/analyses/fy26-closeout.md","bytes":51989,"sha256":"8b840c14099d3606a353604341a6daae57eb31499e97d1cef24d0d731cb28525"},"pdf":{"url":"/docs/analyses/fy26-closeout.pdf","bytes":836420},"verifier":{"path":"scripts/verify_fy26_closeout.py","command":"python3 scripts/verify_fy26_closeout.py"},"charts":["/docs/analyses/charts/fy26-school-budget.svg","/docs/analyses/charts/fy26-school-spend.svg","/docs/analyses/charts/fy26-school-variance.svg"]},{"id":"fy26-closeout-town","title":"FY26 on the town side, as the books stood in June","about":"The same ledger read for the other 67 departments. Snow at 292% of its appropriation, a Reserve Fund never touched, and school costs sitting on the town\u2019s books.","words":4306,"updated":"2026-09-02","markdown":{"url":"/docs/analyses/fy26-closeout-town.md","bytes":25399,"sha256":"c795329e63c4b2f07d125a01813bc783ef24ea0b48934b2acdf2bb0bc6369e5c"},"pdf":{"url":"/docs/analyses/fy26-closeout-town.pdf","bytes":586154},"verifier":{"path":"scripts/verify_fy26_closeout_town.py","command":"python3 scripts/verify_fy26_closeout_town.py"},"charts":["/docs/analyses/charts/fy26-town-budget.svg","/docs/analyses/charts/fy26-town-spend.svg","/docs/analyses/charts/fy26-town-variance.svg"]},{"id":"budget-vs-actual","title":"Budget versus actual","about":"Did the money the town budgeted match the money it spent? Careful about what the documents can and cannot support.","words":5988,"updated":"2026-09-04","markdown":{"url":"/docs/analyses/budget-vs-actual.md","bytes":34387,"sha256":"526a91481bfd8d6a141e1d90f251d2cc1a876ab1a36f0e2cb91fb41d2c93457c"},"pdf":{"url":"/docs/analyses/budget-vs-actual.pdf","bytes":451951},"verifier":{"path":"scripts/verify_budget_vs_actual.py","command":"python3 scripts/verify_budget_vs_actual.py"},"charts":[]},{"id":"free-cash","title":"Free cash: is Lunenburg hoarding, or rebuilding?","about":"How much of Lunenburg\u2019s certified free cash is genuinely spendable, built from the state\u2019s own proofs for nine towns.","words":2924,"updated":"2026-09-04","markdown":{"url":"/docs/analyses/free-cash.md","bytes":17481,"sha256":"daa47e7adb4d77d967c621299ba242977dfeee61eb1035646585ecbac036bb92"},"pdf":{"url":"/docs/analyses/free-cash.pdf","bytes":320958},"verifier":{"path":"scripts/verify_free_cash.py","command":"python3 scripts/verify_free_cash.py"},"charts":[]},{"id":"athletics","title":"Athletics: what it costs, who pays, and what the budget line does not say","about":"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.","words":7334,"updated":"2026-09-05","markdown":{"url":"/docs/analyses/athletics.md","bytes":42236,"sha256":"4164abe25bbd3359842c032cd2d9129f390acbe51d37fff7f84fb2763f45a587"},"pdf":{"url":"/docs/analyses/athletics.pdf","bytes":739401},"verifier":{"path":"scripts/verify_athletics.py","command":"python3 scripts/verify_athletics.py"},"charts":[]},{"id":"athletics-ledger","title":"The athletics ledger: what a fund's cashbook shows that a budget line cannot","about":"Three years of the athletics revolving fund at transaction level, from a records request. Includes $254,121.18 described only as \u201cper memo\u201d.","words":4295,"updated":"2026-09-05","markdown":{"url":"/docs/analyses/athletics-ledger.md","bytes":26322,"sha256":"f1b0891ccebbdc48eec535016e165bc2b86adc108552d01c2a790496b8f1e328"},"pdf":{"url":"/docs/analyses/athletics-ledger.pdf","bytes":372122},"verifier":null,"charts":[]},{"id":"sped-and-the-curve","title":"Special education and the curve","about":"Special education is about 22% of the budget and the largest single driver of the gap. What the rates rest on.","words":6808,"updated":"2026-09-04","markdown":{"url":"/docs/analyses/sped-and-the-curve.md","bytes":39498,"sha256":"0c3e81c711982b360acd1e761500a4773a46c571172c4e7a4888f9e5e2531d29"},"pdf":{"url":"/docs/analyses/sped-and-the-curve.pdf","bytes":553053},"verifier":null,"charts":[]},{"id":"sped-and-funds","title":"Special education, and the money outside the operating budget","about":"Whether the special education escalator can be distinguished from grant money unwinding. It currently cannot, and this says why.","words":3887,"updated":"2026-09-04","markdown":{"url":"/docs/analyses/sped-and-funds.md","bytes":25359,"sha256":"9e855fdf6a94ae9fb15305cb6e5fcfaaa377440e7a344ea4bbafd965a8c39020"},"pdf":{"url":"/docs/analyses/sped-and-funds.pdf","bytes":421960},"verifier":null,"charts":[]},{"id":"fy27-and-the-override","title":"Lunenburg FY28 \u2014 What the source data says (research notes, Aug 2026)","about":"What the FY27 budget did, what the override would have done, and what the votes actually decided.","words":1413,"updated":"2026-08-28","markdown":{"url":"/docs/analyses/fy27-and-the-override.md","bytes":9034,"sha256":"ecd22c4236375ad1c8037e225f90964dc994c0f4960ecef36e23993a4748c281"},"pdf":{"url":"/docs/analyses/fy27-and-the-override.pdf","bytes":296444},"verifier":null,"charts":[]},{"id":"fy27-cut-reconciliation","title":"Two right numbers","about":"Reconciling the district\u2019s published cut list against its own budget columns.","words":807,"updated":"2026-09-04","markdown":{"url":"/docs/analyses/fy27-cut-reconciliation.md","bytes":5161,"sha256":"a2a1fdc6f1b8ba4d37dfbf42e6c0b6112da265403be670c29c28418c008a8caa"},"pdf":{"url":"/docs/analyses/fy27-cut-reconciliation.pdf","bytes":231752},"verifier":null,"charts":[]},{"id":"peer-districts","title":"What comparable districts actually cut, and in what order","about":"What six neighbouring districts did with the same year, and what that does and does not tell you about Lunenburg.","words":1274,"updated":"2026-08-29","markdown":{"url":"/docs/analyses/peer-districts.md","bytes":9018,"sha256":"ab6bdb11829ac11648675e41d0e840943ad61320d83faef5cbe594f839c0f961"},"pdf":{"url":"/docs/analyses/peer-districts.pdf","bytes":257077},"verifier":null,"charts":[]},{"id":"connecting-the-budget","title":"Connecting the school budget to the Town's books","about":"What can be followed from the school budget to the town\u2019s books, and where it stops. Two levels join, the third cannot, and the format a report arrives in decides which.","words":938,"updated":"2026-09-03","markdown":{"url":"/docs/analyses/connecting-the-budget.md","bytes":5588,"sha256":"ae41aa0f390a70bbd4e587cdc2709b76f922d649ffc9c55d054b594dd15e3d2b"},"pdf":{"url":"/docs/analyses/connecting-the-budget.pdf","bytes":173991},"verifier":null,"charts":[]},{"id":"show-your-work","title":"Show your work","about":"Every calculation the site publishes, with its inputs, its formula, a worked example, and whether each figure is published, contractual, statutory, our measurement or our assumption.","words":16033,"updated":"2026-09-05","markdown":{"url":"/docs/analyses/show-your-work.md","bytes":94205,"sha256":"c91821568ecb80d6334059a60aa72252a9ee09e0f10eba0154ed30d4abfc0723"},"pdf":{"url":"/docs/analyses/show-your-work.pdf","bytes":996806},"verifier":null,"charts":[]}],"data":{"database":{"url":"/data/lunenburg.db","about":"Every figure on this site in one SQLite file. The same database the analyses are computed from."},"api":{"url":"/api/index","about":"A read-only JSON API. No key, no rate limit. /api/schema states the grain of each table and the four ways to get a confident wrong answer out of it."},"sources":{"url":"/sources","about":"Every source document, with its address, the publisher\u2019s own filename and a checksum."},"grossBudget":{"url":"/docs/data/gross-school-budget-fy2026.xlsx","about":"The district\u2019s budget in the district\u2019s own shape, with what was actually spent and what other money paid for it \u2014 and amber cells wherever that money is not held."}}}