The corpus › Worked Scenario

FSFP Cost Input Refresh vs. Freeze

What the Fair School Funding Plan pays on refreshed cost inputs against the FY2022 inputs H.B. 96 carried forward, at the same phase-in percentage. A simulation of the question the FY2026-27 budget actually turned on.

scenario/fsfp-input-year-refresh · 10 nodes point here · 6 corrections

This scenario, and Change the formula Contents

A worked scenario is a change argued here in prose, against the act as enacted, with the figures it produced computed by the crates and committed beside it. Change the formula is the live counterpart: the same model, re-run in your browser at whatever lever positions you set, from the same baseline.

RUN. First result. Reproduce with cargo run --example input_year_refresh -p foundation.

The question is the one the FY2026-27 budget turned on: what is the difference between running the Fair School Funding Plan on refreshed cost inputs and running it on the FY2022 inputs H.B. 96 carried forward, at the same phase-in percentage?

What this run is still not Contents

It perturbs one salary of ten; administrator, counselor, librarian, and clerical salaries have all risen too and are held fixed, so the computed increase remains a lower bound. And FY2027 has not happened — the department’s model is a projection, so enrollment, valuation, and income are forecast rather than observed. open

The perturbation is now concrete. Base cost is built by applying statutory staffing ratios to enrollment and pricing each funded position at a statewide average salary for a reference year, times 1.16 for benefits, plus average employer-paid insurance. verified Changing the reference year changes exactly those price terms and nothing else — the ratios, the minimums, and the ADM definitions are untouched. That makes this a clean single-parameter perturbation rather than a re-specification of the model.

There is also a measured precedent to calibrate against: H.B. 33 refreshed the reference year from FY2018 to FY2022, and the statewide average base cost moved from roughly $7,352 in FY2023 to roughly $8,240 in FY2025 — about 12%, of which the phase-in advance accounts for none, since phase-in scales the appropriation rather than the computed cost. inference A refresh of comparable magnitude is the natural first perturbation to test.

What this repository computed Contents

Not what Ohio publishes. Figures derived here from committed fixtures, each one citing the test that reproduces it.

THE ANSWER, on the department’s own published worked example district (20,342.13 base cost enrolled ADM, 43 buildings), perturbing the classroom teacher salary from the FY2022 reference of $68,022.22 to an FY2024 refresh of $73,777.08 — an 8.46% rise: verified crates/foundation

base cost per pupil    $8,198.40  ->  $8,529.55     +$331.14   (+4.04%)
aggregate base cost  $166,773,020 -> $173,509,173  +$6,736,153

Only the teacher sub-component moves; student support, district leadership, building operations, and athletics are unchanged by construction, because the perturbation touches one price term. An 8.46% salary rise produces a 4.04% base cost rise — the salary-driven part of teacher cost is just under half of base cost for a district this size. verified

Scaled to Ohio’s FY2022 base cost enrolled ADM of 1,499,918.26, a comparable refresh raises computed base cost statewide by roughly $497 million a year, from the teacher salary term alone. inference assumes this district’s cost structure is representative The state’s appropriation consequence is a different and smaller number; see the incidence result below.

Predicted shape, stated in advance so the run can contradict it Contents

Freezing the reference year should bite hardest where salaries have risen fastest since FY2022, and the effect should be larger in state-share terms for districts with high state share — because state aid is the residual after local capacity, a reduction in computed base cost falls disproportionately on the state’s portion. inference That would make a freeze regressive across the wealth distribution despite being uniform in method.

Two effects will partly offset it and must be reported separately rather than netted: districts at the 10% minimum state share are insulated at the bottom of the state-share scale verified, and districts held on a guarantee are off-formula entirely and see no effect at all. inference If the run does not show the predicted shape, the reasoning above is wrong.

The incidence result is sharper than predicted Contents

A share among the districts the formula pays, which is what the column says for itself rather than leaving to be carried in from further down. The 294 of 609 districts the guarantee holds capture none of an increase at any capacity on this scale, so the table is incidence across wealth and not coverage across Ohio. verified crates/foundation

local capacity/pupil        share of the increase a formula-paid district receives
$500 - $7,378.56            100%     the formula pays the whole residual
$7,527.58                    55.0%   floored before the refresh, on formula after it
$7,676.59 and above          10.0%   the minimum state share holds it in both runs

Because state aid is the residual after local capacity, a district on formula receives the entire base cost increase, whatever its wealth, and a district the 10% minimum state share holds in both runs receives 10% of it. verified

Between those two there is a band, and it is a gradient Contents

The floor is a share of base cost per pupil, and this perturbation moves base cost per pupil. So the frozen run and the refreshed run reach the floor at different capacities — $7,378.56 and $7,676.59 — and the $298.03 between them is a band where a district is floored before the refresh and paid by the formula after it. Across that band the share it captures falls continuously from 100% to 10%; at the midpoint it is 55.0%. verified crates/foundation

Nobody falls off the floor, because it is a max rather than a cut-off. One part of the band is structural rather than a fact about this district: at its midpoint the captured share is exactly (1 + floor) / 2, whatever the two base costs are. The width is not — it is (1 - floor) times the base cost increase, so it scales with the perturbation. The runner derives its grid from the two thresholds rather than listing capacities, so a later factor vintage cannot move the band out from under the table.

So refreshing the input year is progressive and freezing it is regressive, and the mechanism is not that poorer districts gain proportionally more but that wealthier districts are cut out almost entirely by the floor. Given that 170 of 606 districts sit at the 20-mill floor — a different floor, but correlated with wealth — the share of districts insulated from an input refresh is a first-order question this run does not yet answer. open

Statewide, all 606 districts Contents

verified see crates/foundation/tests/statewide_refresh.rs

Grade-band shares from the department’s October FY2024 headcount file, scaled by each district’s base cost enrolled ADM:

statewide computed base cost increase   $466.2 million per year
ADM-weighted average                    $323.97 per pupil
per-pupil range                         $318.26  to  $442.77

verified crates/foundation

The single-district extrapolation above gave $497 million; the real distribution gives $466.2 million. The gap is mostly denominators — the worked example’s grade mix is slightly richer than the state’s, and FY2024 ADM is lower than the FY2022 base cost ADM used to scale. The two agree to within about 7%, which is the useful check on the extrapolation.

And $466.2 million is within 0.3% of the $465.0 million the department’s own FY2027 model gives for the same refresh — see the guarantee section below. Those two figures are computed on different panels, from different sources, by different routes: this one applies grade-band shares from the October headcount file to FY2024 ADM across 604 districts; that one scales the department’s own published aggregate base cost across 609. Their agreement is the strongest single check this scenario has, and it is a check on the whole chain — the ratios, the benefit multiplier, the professional-development term, and the fixture — not on any one term of it. verified

The spread has a single cause, and it is the staffing minimum Contents

The most-affected district gains 1.4 times per pupil what the least-affected does — $442.77 against $318.26 — with no policy choice involved. 155 of 604 districts are small enough that the six-teacher special teacher minimum binds, and their mean per-pupil gain is $346.28 against $322.87 for everyone else. verified crates/foundation

The spread, revised Contents

Reading the pre-2007 file natively — see crates/spreadsheet — reproduced 604 of the 606 rows byte for byte and left the two suppressed districts’ bands blank, which is what a band containing a withheld grade actually is: unknown, not smaller. Both are now outside this panel, so the denominator is 604.

The spread is real and structural. It was overstated, and the overstatement came from the one convention this corpus had already written down and the pipeline predated. verified

This is the same structural feature that makes small districts expensive per pupil in the first place, now visible as an incidence result: a minimum that funds more positions per pupil also pays out more per pupil when the price of a position rises. inference So a refresh is progressive twice over — once through the state share residual, and again through the small-district minimums — and a freeze is regressive on both.

The guarantee halves it Contents

verified the department’s own FY27 model, carried in crates/project; see crates/foundation/tests/department_model_fy27.rs

districts on the guarantee in FY2027   294 of 609   (48.3%)
their share of ADM                     54.1%
computed base cost increase            $465.0 million
absorbed by the guarantee              $222.9 million
ACTUALLY DELIVERED                     $242.1 million   (52.1%)

A district below its guarantee floor receives the guarantee, not the formula amount. When the formula amount rises, the top-up shrinks by exactly the same sum and total funding does not move. So 253 districts — two in five, holding 43.0% of Ohio’s students — would gain nothing at all from a reference-year refresh, and 356 districts do gain. 41 guaranteed districts would be lifted off; the median guaranteed district is held more than three times above what a refresh would give it, so the guarantee is not a marginal buffer but the operative funding mechanism for those districts. verified crates/scenario-delta

The three counts were published as 242 unmoved and 52 lifted off. Both sum to the same 294 on the guarantee, which is why the decomposition read as coherent while neither term matched the calculator — the arithmetic that would have caught it was the one already satisfied.

This does not overturn the incidence findings above — districts on formula do receive 100%, and the small-district minimums do concentrate the gain — but it shrinks the population those findings describe to roughly half the state. Any statement that a refresh is worth half a billion dollars to Ohio districts is wrong by a factor of two.

It also reframes the phase-in. In the terminal year of a plan designed to fund every district at its computed cost, nearly half of districts are funded by a hold-harmless from the previous regime instead. inference

Inputs verified Contents

The FY2022 reference salary this whole perturbation is measured from is now the department’s own: $68,022.22, read off the FY27 TRAD State Foundation Funding Calculator through StatewideFactors::fy2027 rather than restated as a literal. verified The figures above are the first version of this result that perturbs from a number the workspace does not contradict elsewhere; see the revision below.

The state share floor is not a small correction, and the $242.1m above does not apply it Contents

computed base cost increase        465.0
  plus the denominated categoricals +32.1   special education, English learners and
                                            career-technical are priced in base cost
                                            per pupil, so a refresh raises them too
computed in total                  497.1
  less the ADM denominators         -7.6   base cost averages three years;
                                           the state share is paid on this one
  less the minimum state share    -118.7   138 districts keep a tenth of it
  less the guarantee              -150.2   253 districts keep none of it
delivered as state aid             220.6   44.4% of what a refresh computes

verified see crates/scenario-delta/tests/who_a_change_reaches.rs, which asserts every line and that the four close on the total, so this is a decomposition rather than four separately plausible numbers

So the deliverable share is 44.4%, not 52.1%, and a third mechanism was missing from the accounting entirely: base cost is computed on a three-year average ADM while the state share is paid on the current year, which costs a shrinking state a further $7.6M. The two figures are not strictly comparable — the run above perturbs one salary per district and this one applies a uniform scale of the same statewide magnitude — so treat 44.4% as the corrected order of magnitude rather than as a replacement to four significant figures. inference the comparison verified each decomposition term

What actually cuts wealthy districts out Contents

The direction of the finding is unchanged and its magnitude is sharper than stated: per pupil, the increase pays $305.63 to the poorest quintile and $20.81 to the wealthiest, a ratio of about fifteen to one. A refresh is progressive; the reason is mostly that wealthy districts are on the guarantee. verified

Properties Contents

NameFSFP cost input refresh vs. freeze
QuestionHolding the phase-in percentage at its enacted FY2026 and FY2027 values (83.33% and 100%), what is the per-district difference in state foundation aid between base cost computed on refreshed staffing and salary inputs and base cost computed on the FY2022 inputs carried forward by Am. Sub. H.B. 96?
Perturbations
Single perturbation: the cost input reference year in the FSFP base cost calculation
[R.C. 3317.011].
  Baseline  = FY2022 statewide average salaries and per-pupil operating amounts, as carried
              forward by H.B. 96. inference confirm against the enacted act
  Perturbed = the most recent fiscal year for which statewide average salary and operating
              expenditure data are available.
Affects only the price terms: average salary by staff category, average employer-paid
insurance cost, and the statewide per-pupil amounts for building, supplies, technology, ITC
support, safety, and co-curricular activities. Staffing ratios, minimums, ADM definitions,
local capacity weights, and the phase-in percentage are all held at enacted values.
For reference, the FY2022 price vector is recorded in full on FSFP Base Cost Calculation.
Input projectionsNone required for FY2026. Enrollment and valuation are observed or estimable from current data. FY2027 requires projected enrollment via project; that leg must be reported separately from the FY2026 leg so projection uncertainty is not mixed into the policy effect.
HorizonFY2026-FY2027
Results in the repositorycrates/foundation/examples/input_year_refresh.rs — the runner is the result, because it is deterministic and dependency-free. Re-running it reproduces the figures exactly; there is no separate output artifact to drift from the code that made it.
Results
Worked example district, 20,342.13 base cost enrolled ADM, priced at the FY2027 factor set
— the FY2022 averages H.B. 96 carries forward, which is what "frozen" means over this
horizon. Only the enrollment is the FY2022 payment report's; the prices are not, so these
are not that report's totals.
  teacher salary input      $68,022.22 -> $73,777.08    (+8.46%)
  teacher base cost        $97,068,364 -> $103,804,517
  aggregate base cost     $166,773,020 -> $173,509,173  (+$6,736,153)
  base cost per pupil        $8,198.40 -> $8,529.55     (+$331.14, +4.04%)
All other sub-components unchanged. verified
The minimum state share is MINIMUM_STATE_SHARE_FY2027, 10%, which the department's FY2027 calculator states for both FY2026 and FY2027 on its Notes sheet. It binds above $7,378.56 of local capacity per pupil frozen and $7,676.59 refreshed. verified
ConfidenceThe direction and the incidence structure are robust: they follow from the residual definition of state share and the 10% minimum state share in force over FY2026-FY2027, both of which are statutory and both of which are verified against the department's published calculation.

The structure is a gradient and not a binary, which is a correction rather than a caveat: the floor is a share of base cost per pupil, so the two runs reach it at different capacities and a $298.03 band of capacity straddles it. The band is derived in the runner rather than sampled, because sampling is how it was missed. verified

The magnitude is a lower bound and should be quoted as one. Perturbing one salary of ten understates a real refresh; the other nine categories would each add to it.

The FY2022 baseline salary is no longer a sensitivity. It was secondary reporting, and it was wrong; it is now the department's own $68,022.22 and the 8.46% gap is verified at both ends. What that bought is an independent check rather than a narrower error bar: the statewide $466.2M and the department model's $465.0M now agree to 0.3%, where the figures computed from the secondary salary sat 6.3% apart and were presented as two unreconciled answers.

The guarantee is no longer a sensitivity of this run. It is a population, and the run states it: the incidence column is a share among the districts the formula pays, and crates/foundation/examples/input_year_refresh.rs counts the other half — the districts the guarantee holds, and their share of ADM — off the department's own FY2027 model beside the table. It counts rather than restates, so a later vintage of that fixture moves the column's population with it. verified

What the runner still cannot do is say which side of the guarantee floor its worked-example district falls on. It has one district's capacity and no guarantee status, so it prices the incidence and not the coverage; the coverage question is statewide, and the decomposition in the findings is where it is answered. verified

Where this appears on the site Contents

The pages outside the corpus that link here, and the section of each the link sits in.

Cleveland MunicipalIn “Why base cost is $8,120 per pupil”. The same link is on all 609 pages like this one.
MethodIn “Base cost, and how the build-up is reconciled”.

What this node used to say Contents

The corpus is not rewritten to have always been right. Each entry is a claim this node carried, what replaced it, and the thing that settled it.

Correction 1 of 6

It said

An incidence table computed at MINIMUM_STATE_SHARE_FY2022 — 5% — over an FY2026-FY2027 horizon, reporting “$500 - $7,000 100%” and “$12,000 (at 5% floor) 5%”, and the sentence under it, under the strongest claim tag: “there is no gradient between the two — the transition is the floor itself.”

It says

Two defects with one cause, and neither survives.

The floor is 10% over this horizon, not 5%: the department’s FY2027 calculator states 0.1 for both FY2026 and FY2027 on its Notes sheet, and 138 of 609 districts sit exactly on it. The node already said 10% twice — in the prediction it stated in advance, and in the statewide decomposition’s “138 districts keep a tenth of it” — so the crate answering this statewide and the example answering it for one district disagreed about which year they were in.

And there is a gradient. The floor is a share of base cost per pupil and this perturbation moves base cost per pupil, so the frozen and refreshed runs reach it at $7,378.56 and $7,676.59 of capacity: a $298.03 band where a district is floored before the refresh and on formula after it, capturing 100% at one end and 10% at the other and everything between. “No gradient” was not a property of the mechanism. It was the choice of sample points — $7,000 then $12,000, which straddles the band without landing in it. verified

Settled by

#412, reading the runner’s MINIMUM_STATE_SHARE_FY2022 against the horizon: and question: this node states — both of which name FY2026-FY2027 — and then asking what a floor defined as a share of a quantity the perturbation moves does between two runs.

What else it touched

The single-district illustration and the four prose sites quoting it, here and in scenario/README.md. Nothing statewide moves: crates/scenario-delta/tests/who_a_change_reaches.rs already priced the floor at 10% — $118.7 million over 138 districts — and the statewide panel was already at the FY2027 factor set throughout.

The levels move and the delta does not. Settled in the same pass was which year the run is in at all: it priced the FY2027 teacher salary into the FY2022 factor set, so its base cost per pupil was a mongrel of two vintages. Both runs are StatewideFactors::fy2027() now — the prices H.B. 96 carries forward, which is what “frozen” means here — and base cost per pupil reads $8,198.40 rather than $7,629.24. The increase is $331.14 per pupil either way: it is funded positions times the salary gap times the benefit multiplier, and none of those three moved.

Two structural changes so this cannot recur by sampling. The run is foundation::refresh_worked_example rather than an example’s main — an example is reachable by no gate, which is why six figures of it are bound now and none were before. And the runner derives its grid from the two thresholds instead of listing capacities, so a later factor vintage moves the samples with the band rather than out from under it. local-capacity asserts the shape directly: continuous, monotone, 100% at one end and the floor rate at the other.

Correction 2 of 6

It said

A recorded and unresolved sensitivity: the single-district runner does not model the guarantee population at all, so its “100%” column overstates coverage by however many districts are guaranteed. Disclosed rather than hidden, and no less wrong for it.

It says

The column states its own population. It is a share among the districts the formula pays, and the runner counts the other half off the department’s own FY2027 model — the districts the guarantee holds, and the share of ADM they carry — and prints it beside the table. The two halves of this node answer the same question the same way. verified

Settled by

#393, which read the confidence block against the findings block and found them disagreeing about the same quantity — and observed that project::refresh had since made the statewide computation available, which it was not when the sensitivity was recorded.

What else it touched

The incidence table and the sentence above it, here and in the runner. Nothing computed moves: every share in the column is unchanged and was always correct for the population it describes. What was missing was the population, which is the failure a coverage figure can have while every number in it is right.

The runner counts rather than restating. foundation::department_model is the fixture the base cost check already runs against, so the guarantee population arrives by the same route as everything else the runner prints, and a later vintage of that file moves both.

Correction 3 of 6

It said

A four-line decomposition of a $465.0 million computed base cost increase, delivering $197.1 million as state aid — 42.4% — with the guarantee absorbing $141.6 million and 256 districts keeping none of it.

It says

The decomposition predated Policy::base_cost_scale reaching the categoricals denominated in base cost per pupil. A refresh computes $497.1 million, not $465.0 million: special education, English learners and career-technical are each weight x base cost per pupil x count x state share, which adds $32.1 million the old accounting had nowhere to put. With that line present the guarantee absorbs $150.2 million rather than $141.6 million, 253 districts keep none of it rather than 256, and $220.6 million is delivered — 44.4%. verified

Settled by

An audit of the /scenario routes that began at the page and ran back to its sources. The page’s held-fixed card had taken a proportional product from scenario/ACTIONS.md and printed it as delivered aid (#233); tracing that figure found this block still carrying the pre-decision decomposition, and citing who_a_change_reaches.rs for it — a test that had been updated to the new numbers and now asserted different ones than the block quoting it.

What else it touched

This block and the summary sentence under it. The per-quintile incidence below is unaffected — it is computed from the same runs and was already recomputed when the decision was taken, which is why its ratio of about fifteen to one did not move.

The wider correction is #251: the same superseded arithmetic survived in scenario/ACTIONS.md and in “Scenario models Ohio”, in both cases carrying the strongest claim tag while citing a test that asserts something else. A figure corrected in a crate and left standing in three prose carriers is the #120 shape, and this is the third time this repository has found it.

Naming a claim tag in prose is avoided here on purpose: the counter that produces the totals in README.md matches the token wherever it appears, so a sentence about a tag is counted as one. This paragraph inflated the verified count by one before it was reworded.

Correction 4 of 6

It said

Every figure perturbed from an FY2022 reference teacher salary of $67,654 — a $496.3 million statewide headline, $344.75 per pupil ADM-weighted, a $338.62 to $471.10 range, and a single-district rise of $352.33 per pupil.

It says

$67,654 was Fordham’s figure, secondary reporting, and it was carried as [inference] because it was never the department’s. The department’s own FY27 calculator prices the FY2022 reference teacher at $68,022.22, and the workspace had held that value in StatewideFactors::fy2027 since the calculator was retrieved — so this node was perturbing from a number its own crate contradicted. Corrected, the block scales down by 1/1.0640 throughout: $466.2 million statewide, $323.97 per pupil, a $318.26 to $442.76 range, and $331.14 per pupil on the worked example. verified

Settled by

An audit reading the constant against the committed FY27 department-model panel rather than against the secondary source it was originally taken from.

What else it touched

Every derived figure in this node’s own runs, and nothing outside them: the guarantee and state-share-floor decompositions are computed from the department’s model directly and never touched the constant, which is why their $465.0 million did not move.

The correction recovers a cross-validation that the error had hidden. At $496.3 million against the department model’s $465.0 million the two runs sat 6.3% apart and the node presented them as separate answers rather than as a discrepancy. At $466.2 million they agree to 0.3%, and the agreement is now the node’s strongest evidence rather than its loosest end.

The three sites carrying the literal are gone: all three now read the salary off StatewideFactors::fy2027(), so a future correction to the price vector cannot leave a panel perturbing from a superseded figure again.

Correction 5 of 6

It said

A 1.7x spread with a maximum of $580.82 per pupil, reported through four phases.

It says

The maximum was an artifact. It belonged to Vanlue Local, whose grade-band fixture was produced by a headless LibreOffice pipeline that summed the department’s withheld <10 grade counts as zero. Vanlue has four withheld grades, so its headcount was understated by up to 36 in a district of 150 and the ADM / headcount scale factor driving its funded teacher count was inflated by nearly a third.

Settled by

Re-deriving the grade-band fixture with the withheld counts handled as withheld rather than as zero.

What else it touched

A pipeline defect rather than a modeling one, and it reached only districts with withheld grade counts — which is to say small ones, where the proportional distortion is largest.

Correction 6 of 6

It said

“Wealthier districts are cut out almost entirely by the floor” — the state share floor credited with the incidence result.

It says

The guarantee does more of that work. Across valuation quintiles the count held on the guarantee runs 10, 31, 39, 88, 88; in the wealthiest quintile 90 districts are guaranteed, 95 are at the floor, and 73 are both, so the two cannot be summed as independent mechanisms. In the poorest quintile no district is at the floor at all, so there the floor explains nothing whatever. verified

Settled by

Crossing floor status against guarantee status per district rather than reading each margin alone.

What else it touched

The incidence result itself stands. What was wrong was the mechanism assigned to it, which matters because the two respond to different policy levers.