How This Analysis Stays Accurate & Neutral

The safeguards behind every chart — what's checked automatically, what a person reviews, and where the limits are.

The short version. This is an independent, volunteer analysis of public budget documents — not an official town product and not aligned with any party or campaign. Because anyone can be wrong (or can let a conclusion they like slip past the evidence), the project is built with explicit safeguards: every number traces to a public source, an automated gate blocks objectively wrong or inconsistent figures from being published, and the whole analysis was deliberately attacked from a skeptic's point of view — with the less-flattering result kept whenever the data demanded it. This page documents all of that, including what the safeguards can't catch.

Why this page exists

A budget analysis is only as trustworthy as a reader's ability to check it. Numbers about taxes and schools are easy to slant — by picking a flattering comparison, rounding in a convenient direction, or stating a conclusion more confidently than the data supports. So rather than ask you to trust the author, this project tries to make the work checkable, and to put guardrails between a draft and what gets published.

There are three layers, described below: you can find every number's origin, an automatic check refuses to let objectively wrong figures through, and the analysis was put through a deliberate effort to disprove its own conclusions. A single rule runs through all of them: the automatic checks handle plain facts; people handle the judgment calls.

1. Everything traces to a public source

Nothing on this site is a number you have to take on faith:

2. An automatic check that blocks wrong numbers

Before any update to this site goes live, it passes through an automatic check — a small built-in helper that re-does the math and compares the numbers against each other. Think of it like a spell-checker, but for figures instead of spelling. If it finds something objectively wrong, it stops the update until the problem is fixed. It runs on its own, so nobody has to remember to start it.

What it looks for

How and when it runs

The check happens at three different moments, so a mistake would have to slip past all three to ever reach you:

The line it deliberately won't cross

The check was built around one rule: a machine should decide facts, never judgment. That rule shows up as four deliberate limits.

Blocks on accuracy only

It stops a change only for objective, checkable problems — bad arithmetic, a figure that disagrees with its source data or with another page, a dead source link. Nothing else can stop a change.

Warns on wording — never blocks

Whether a sentence reads as slanted is an editorial call. The review can flag it for a person to look at, but it is never allowed to block publication on its own. Tone is a person's decision, not a machine's.

Flags mismatches — never overwrites

If a number on a page disagrees with the source document, the gate flags it for a human instead of "correcting" it automatically — because the document could be the stale side. A person decides which is right.

Fixes only the mechanical, and only when asked

If anything is ever corrected as part of a review, it's limited to low-risk mechanics — an arithmetic typo, a rounding slip, a unit label, a broken link — and only when a person runs the review and the right value is unambiguous. Anything substantive goes to a human to decide.

The checker and the full list of rules it follows are kept out in the open alongside the rest of the project's files, so anyone can read exactly what it does. If you find a number it should be guarding but isn't, that's worth reporting — see below.

The actual tool: an open-source skill called budget-review

To be concrete about what "the automatic check" is: it's a named, open-source review skill — budget-review — kept in the project repository where anyone can read every line of it. Its number-checking half is a standalone script that runs on its own — on the author's computer and automatically whenever the public site is updated — and the skill as a whole is what the AI assistant, Claude Code, follows when it helps review the site. It is deliberately split into two halves that do not mix:

That split is the rule stated above — facts to the machine, judgment to a person — made literal: the part that can stop a change is plain code with no view of its own, and the part that has a view can only suggest. The complete skill, including the exact instructions the AI is given, is published in the repository as SKILL.md.

3. We tried to break our own findings

The most important safeguard isn't automatic. After the first draft, the analysis was put through several deliberate review passes whose job was to disprove it: a number-by-number audit (recomputing every headline from the raw figures), a "skeptical citizen" pass that worked through seventeen specific challenges a doubtful reader would raise, and a final read of the whole site as if by a political opponent looking for anything to attack. The rule throughout: when better data contradicts a flattering claim, the claim changes — not the data.

Several conclusions did not survive, and the site now reflects the corrected, less-flattering versions:

Claim in an earlier draftWhat the deeper data showed
Colchester's property tax rate is "3rd lowest of 7" nearby towns. Once adjusted so towns at different points in their revaluation cycle are compared fairly, Colchester ranks 9th of 15 — middle of the pack, not "well below average." Both the raw and adjusted rankings are now shown.
Colchester has the "lowest per-capita spending" among demographic peers. On an apples-to-apples basis across all the originally considered towns, Colchester is 4th-lowest of 15 — three towns spend less. The "lowest" framing was an artifact of which towns happened to have data; that's now disclosed.
A specific accusation that the schools "quietly" raised an insurance-reserve draw rate without justification. The claim couldn't be substantiated from the source documents, so it was removed entirely rather than left as an unsupported allegation.
The state-aid shortfall is a single confident dollar figure. It's now presented as a range, because the answer depends on which inflation measure you use — and the originally published figure is openly labeled the conservative end.
"No administrative bloat" — staffing held flat. True at the endpoints, but the middle years saw a real (since-reversed) expansion in central-office director roles. The fuller, more nuanced picture is now shown instead of the clean headline.
Cheerleading phrases in the summary — "Spending is Under Control," "leading in fiscal efficiency," "disciplined fiscal management." Removed and replaced with plain description. Reading the site as a hostile critic would made it obvious these read as advocacy, not analysis.

A complete log of every challenge raised and how it was resolved is kept with the project — in the reviewers' notes and in a dated change log that records each correction.

4. Counterweights to bias

Beyond catching outright errors, the analysis is built to show more than one side of a question wherever a single framing could mislead:

5. Charts are drawn to honest scales

A chart can mislead without a single wrong number — just by where its axis starts. The rule this site follows is standard practice, and it cuts both ways:

Bar charts start at zero

A bar's length is how the eye reads its value, so the value axis begins at zero — starting it higher stretches a small gap into a big-looking one. Four bar charts that had begun above zero were reset to a zero baseline: the two per-capita spending comparisons and the "state ECS aid as a share of the school budget" chart on the Budget Trends page, and the Board of Education insurance chart on the Insurance page. Only the axis changed; the numbers did not.

Indexed and trend lines do not — and that's correct

Some charts legitimately don't start at zero. Indexed charts set every series to 100 in a base year to compare growth rates — there the reference point is 100, not 0. Time-trend lines in real dollars or percentages frame the axis to the data's own range to show the direction of a trend. In both, the axis is not a bar's height, and every value is labeled on the axis and in the hover tooltip so a reader can check the real magnitude.

The dividing line: if a bar's length stands for a quantity, the axis starts at zero; if an indexed or time-trend line is showing a rate or a direction over time, it is framed to the data and the numbers are always labeled.

6. What these checks can't do

Being honest about the guardrails means being honest about their gaps.

7. Hold us accountable

Found a number that looks wrong? Please say so. The single best check on this analysis is a resident who recomputes something and challenges it.

Email john.e.farrell@gmail.com — that's the surest way to reach the author. Every correction is recorded in the change log with the date and what changed, including the times the analysis had to walk back a conclusion it would rather have kept.