Status
active
Date
September 25, 2026
Methodology version
4

0010: Statewide publication rules: empty cells, no-data years, the counties index and flag review

Context

PIPE-09 (statewide 67-county pipeline scale-out), STATE-02 (the six statewide figures counties.json publishes), VALID-03 (year-over-year anomaly detection), VALID-05 (missing fiscal years, zero population, duplicate rows, unknown codes, unexpected negatives) and VALID-07 (suspicious records flagged for review, never published silently) all depend on four rules that are undecided going into statewide scale-out: 05-CONTEXT.md records these as D-02, D-03, D-06 through D-10. Two of the four (D-02, D-03) change published figures; one (D-10) fixes the field names of a permanent /data/v1/ contract; one (D-06 through D-09) decides which data-quality flags a reviewed file may let through the release gate. Per T-03-26 (03-SECURITY.md, applied identically at ADR-0008 and ADR-0009), a rule that changes published numbers or fixes a permanent field name is never agent-chosen — this record puts all four questions in front of the maintainer at once, with numbers measured from the real archive, exactly as ADR-0008 and ADR-0009 did before their own maintainer decisions.

All figures below are measured, read-only, by a scratch script outside the repository (mode_notes) that caches the real archived EDR workbooks via collectors.cache.fill_cache and parses them with the adapter’s own production parsing primitives — read_sheet_structure, forward_fill, _format_account_code — and, for the Q1 proposed rule, an in-memory copy of that rule applied to the raw grid. Task 1 changed nothing under pipeline/ or apps/; its own verification confirmed active_methodology_version still returned 3 and both trees were clean at that point, before Task 2’s maintainer reply and Task 3’s coordinated version-4 bump. Covered fiscal years for every government come from data/audit/coverage-status.csv’s status == "present" rows (never a literal), matching every prior decision record’s convention.

Decision

Every subsection below states the option the maintainer chose, after Task 1 measured every option and Task 2’s checkpoint:decision (gate="blocking-human") recorded the maintainer’s reply (Decision sign-off, below). The rejected alternatives for every question are recorded under “Considered Options” in Rationale, not repeated here as if they were also in effect.

Q1 — The empty-string fund-column leaf cell (D-02)

An exhaustive scan of all 134 archived workbooks’ fund-column leaf cells and total-row cells, across every covered fiscal year (1,097,659 cells scanned; see Source Evidence), found exactly 21 leaf cells whose raw value is the empty string, and zero total-row cells. Every one of the 21 is on one of two sheets: Liberty County’s FY2023 revenues sheet, row 72 (account 351.5, “Court-Ordered Judgments and Fines — As Decided by Traffic Court”), and Monroe County’s FY2024 revenues sheet, rows 87 (361.1, “Interest and Other Earnings — Interest”) and 92 (369.9, “Other Miscellaneous Revenues — Other”). No other government, year, series, row or cell — leaf or total-row — carries an empty string anywhere in the archive.

Chosen: leaf-only blank-as-zero (option a). An empty-string cell in a fund-column leaf row is read as Decimal("0.00"). A non-leaf empty string (a sheet total-row cell) still raises ValueError, unchanged. Applying this rule in memory to both affected sheets, every fund column’s leaf sum equals that sheet’s own reported total-row value exactly — a $0.00 difference on all 12 fund columns of both sheets (well inside the existing $1.00 reconciliation tolerance; see Source Evidence). Liberty FY2023’s resulting governmental Total Revenue (ADR-0008 scope, excluding account codes 381/382 — neither appears on this sheet’s governmental columns) is $26,508,391.00; Monroe FY2024’s is $408,031,532.00. Option b (keep raising, which would leave Liberty and Monroe permanently unpublishable, SC1 unmet) is recorded in Rationale’s Considered Options.

Q2 — The whole-sheet-zero no-data year (D-03)

The same exhaustive scan computed, for every (government_id, series, fiscal_year) triple in the archive (1,340 triples: 67 governments × 2 series × 10 covered fiscal years each), the governmental-fund leaf SUM over every account code — the exact categorize.compute no_data_by_key predicate — and, separately, the leaf SUM across every fund group (governmental, proprietary, fiduciary, component_unit) on the same sheet. Exactly one triple is zero on both measures: Jefferson County, fiscal year 2018, both the expenditures and revenues series — governmental leaf sum $0.00 and whole-sheet leaf sum $0.00 for each. No other government-year-series in the archive is zero on either measure. data/audit/coverage-status.csv marks Jefferson FY2018 present for expenditures; that marking is not itself examined for “present” meaning “has real leaf data” anywhere in the current pipeline, and is the root cause a later plan’s check_yoy_change/check_missing_fiscal_year must correct for.

Today, metrics.compute._build_windows raises ValueError outright the moment any window’s start year has total_expenditures == 0 (pipeline/metrics/compute.py:256-260) — so simply adding Jefferson to publish_scope without a null-year rule does not silently publish a wrong number, it crashes the pipeline. A null-year rule is required before Jefferson can be included at all, not just before its figures read correctly.

Every published field this changes for Jefferson FY2018:

Chosen: null with reason (option a1). The listed SpendingYear/RevenueYear fields become T | None with a new sibling null_reason field carrying the literal "no_data_reported", mirroring the existing RevenueGroupRow/PropertyTaxYear null-with-reason convention exactly. data/audit/coverage-status.csv stays byte-identical (parse, population and inflation stages all read covered years from it as-is); a new, dated data/audit/revisions.md entry records that FY2018 was found to carry no real data despite the present marking, with the source evidence above cited. Options a2 (omit-with-list, which changes the years array’s length semantics) and b (publish $0, explicitly rejected by D-03) are recorded in Rationale’s Considered Options.

Q3 — The /data/v1/florida/counties.json contract (D-10)

The proposed shape, from <interfaces>, reusing every existing model this codebase already publishes for summary.json so a consumer who knows that file already knows these field names:

Orange County’s real row, built from its own currently-published summary.json and spending.json (methodology_version 3; the fields below are unchanged by the version-4 bump — only the stamp moves):

{
  "government_id": "US-FL-COUNTY-ORANGE",
  "slug": "orange-county",
  "name": "Orange",
  "consolidated": false,
  "first_fiscal_year": 2015,
  "last_fiscal_year": 2024,
  "dollar_year": 2024,
  "latest_spending": {
    "fiscal_year": 2024,
    "value": 2979127753,
    "source_ids": ["fl-edr-orange-expenditures"]
  },
  "ten_year_spending_change": {
    "start_fiscal_year": 2015, "end_fiscal_year": 2024,
    "start_value": 1347470899, "end_value": 2979127753, "ratio": 1.210903,
    "source_ids": ["fl-edr-orange-expenditures"]
  },
  "population_change": {
    "start_fiscal_year": 2015, "end_fiscal_year": 2024,
    "start_value": 1291844, "end_value": 1533646, "ratio": 0.187176,
    "source_ids": ["census-pep-v2020-co-est2020-alldata", "census-pep-v2024-co-est2024-alldata"]
  },
  "real_spending_change": {
    "start_fiscal_year": 2015, "end_fiscal_year": 2024,
    "start_value": 1773435949, "end_value": 2979127753, "ratio": 0.679862,
    "source_ids": ["bls-cpi-cuur0000sa0-2014-2023", "bls-cpi-cuur0000sa0-2024-2024", "fl-edr-orange-expenditures"]
  },
  "real_spending_per_resident": {
    "fiscal_year": 2024, "value": 1942.51,
    "start_fiscal_year": 2015, "start_value": 1372.79, "ratio": 0.415007,
    "source_ids": ["bls-cpi-cuur0000sa0-2014-2023", "bls-cpi-cuur0000sa0-2024-2024", "census-pep-v2020-co-est2020-alldata", "census-pep-v2024-co-est2024-alldata", "fl-edr-orange-expenditures"]
  },
  "spending_per_resident": {
    "fiscal_year": 2024, "value": 1942.51,
    "source_ids": ["census-pep-v2024-co-est2024-alldata", "fl-edr-orange-expenditures"]
  },
  "population": {
    "fiscal_year": 2024, "value": 1533646,
    "source_ids": ["census-pep-v2024-co-est2024-alldata"]
  }
}

Every value above is copied verbatim from the real, already-published summary.json/ spending.json files (apps/web/public/data/v1/florida/US-FL-COUNTY-ORANGE/) — nothing here is recomputed, matching the “same six figures, once each” invariant 05-RESEARCH.md’s Pattern 1 recommends.

Chosen: accept the field list as proposed. The edit (maintainer-supplied old=new name pairs) and drop population (which leaves D-13’s population-band filter with no published figure to band on) alternatives are recorded in Rationale’s Considered Options.

Q4 — The review-disposition file, thresholds and negative-leaf scope (D-06 through D-09)

Every flag below is re-derived directly from the archive this session — none is copied from 05-RESEARCH.md’s own (explicitly labeled, lower-confidence) estimates, and none reproduces the retired, unreproducible “451 rows” figure (05-RESEARCH.md Assumptions Log A1).

Custodial-share flags (>2%, ADR-0002), recounted from the committed data/audit/gasb84-statewide-check.csv’s flagged_governments column (pipe-delimited):

Fiscal year Flagged / 67
2015–2020 0 (no Custodial column exists before FY2021 — a structural no-op)
2021 35
2022 53
2023 66
2024 66

These exactly match ADR-0002’s own recorded figures — confirmed, not re-derived independently, since ADR-0002’s underlying dataset (gasb84-statewide-check.csv) is itself the committed source of record for this check and was not re-generated this session.

Negative leaf rows, governmental fund group only (the scope D-07 proposes), across every covered year in the archive:

Scope Rows Distinct (government_id, series) pairs
All roots 743 83
Root 361 only (“expected negative” — interest and investment earnings) 454 44
Every root except 361 (the “unexpected negative leaf” candidate set under D-07) 289 75

The same breakdown across every fund group (governmental, proprietary, fiduciary, component_unit) — for comparison, not the proposed scope:

Scope Rows Distinct (government_id, series) pairs
All roots 1232 95
Root 361 only 705 44
Every root except 361 527 92

Root-361 negative leaf rows specifically in FY2022 (the year 05-RESEARCH.md’s qualitative finding names — a rate-hike year producing unrealized investment losses statewide):

Scope Rows
All fund groups 224
Governmental only 141

None of these figures match the retired “451” figure or 05-RESEARCH.md’s own approximate “220/138” estimate; both are superseded by this exhaustive, session-fresh re-derivation.

Year-over-year rule (+100% / −50% strict, applied to each county’s governmental headline total — metrics.parquet’s own total_expenditures/total_revenue computation: governmental leaf sum minus headline_rules.json’s transfer-code exclusions, never a raw leaf sum, 05-RESEARCH.md Pitfall 1), across every consecutive covered-year pair in the archive:

Exactly 2 flags, both Jefferson County, FY2017→FY2018 (the same whole-sheet-zero year Q2 measures):

Government Series FY range Start value End value Ratio
Jefferson expenditures 2017→2018 $21,337,587.00 $0.00 −100.0000%
Jefferson revenues 2017→2018 $20,317,385.00 $0.00 −100.0000%

This confirms D-08’s “only Jefferson trips it today” claim exactly, and confirms it is the same government-year Q2’s whole-sheet-zero rule already covers (a missing_fiscal_year flag and a YoY flag on the same underlying fact, both real and both needing acknowledgement or the null-year rule’s own resolution).

Chosen: accept the <interfaces> schema, key, check list, unmatched-entry rule, thresholds and governmental negative-leaf scope as proposed — the review-disposition file at pipeline/adapters/florida/review_dispositions.json, matched on the five-field key (government_id, fiscal_year, check, subject, observed_value), restricted to the six check ids named in <interfaces>, thresholds in pipeline/adapters/florida/validation_thresholds.json (custodial share >2%, YoY strictly above +100% or strictly below −50% on headline totals, expected-negative roots starting with 361, negative-leaf scope governmental). No disposition is pre-filled by this task or any task in this plan — Task 3 records the schema itself, never a real acknowledgement (T-03-26); the maintainer’s first review of real flags is plan 05-06’s own work, not this plan’s. The edit alternative (maintainer names which parts to change) is recorded in Rationale’s Considered Options.

Q5 — Sarasota FY2022 revenues row 26 (324.XXX) source double-count subtotal

Discovered during plan 05-04’s Task 1 full local release chain (not one of the four questions Task 1 originally measured): the full 67-county release failed exactly 3 of 23,464 checks, all Sarasota County FY2022 revenues. A corpus-wide scan of all 134 archived workbooks’ 268 series-sheets for an account-code label matching \d+\.XXX (a subtotal row EDR itself prints, never a leaf account code) found exactly one hit in the whole archive: Sarasota’s FY2022 revenues sheet, row 26, account label 324.XXX (“Impact Fees - Total”). Its Special Revenue column value ($34,281,953.00) equals exactly the sum of the seven leaf impact-fee rows under root 324 that post to Special Revenue (rows 17, 18, 21-25: codes 324.11/.12/.31/.32/.61/.91/.92); its Enterprise column value ($23,783,293.00) equals exactly the sum of the two leaf impact-fee rows under root 324 that post to Enterprise (rows 19-20: codes 324.21/.22).

read_sheet_structure’s leaf scan already excludes row 26 correctly — its account-code cell is the string "324.XXX", not a number, so it is read as a category-rollup row and never double-counted in the parsed leaf records. The workbook’s own Total - All Account Codes row, however, sums every printed cell in each fund column including row 26’s own subtotal — double- counting the leaf rows it summarizes. This is the source file’s own arithmetic error, not a TaxpayerScope parsing defect: the leaf-derived sum is correct; the sheet’s own printed total is inflated by exactly the subtotal it prints alongside its parts.

No published /data/v1/ figure is affected. metrics.parquet‘s total_revenue for Sarasota FY2022 is computed from the leaf-derived (categorized) sum, which already excluded row 26 correctly; only the reconciliation checks’ own comparison baseline — totals.parquet’s reported_amount, sourced directly from the sheet’s own Total - All Account Codes row — was wrong. This is a reconciliation-validation correction, not a figure-derivation rule, and does not bump methodology_version.

Chosen: Correct it (option a, maintainer-recommended). Apply a narrowly-scoped, keyed correction to totals.parquet‘s reported total for exactly this (source_id, fiscal_year, sheet_row, account_code_label, fund_group, fund_type, subtotal_amount) — never a tolerance widening, an exclusion, or a scope edit (mode_notes’ stop rule, T-03-26). Recorded in pipeline/adapters/florida/reported_total_corrections.json (Florida-adapter data, never core code) and applied by edr_workbook.py‘s _apply_reported_total_corrections, which re-reads the named row’s raw label and cell value before ever subtracting — a relabeled row, a different fund column, or a changed amount all raise rather than silently applying a stale correction. Option b (widen the reconciliation tolerance) and option c (exclude Sarasota FY2022 from publish_scope) are recorded in Rationale’s Considered Options — both were rejected as exactly the moves mode_notes’ stop rule forbids.

Q6 — Published whole-dollar guard cents (headline, category, revenue-group and property-tax totals)

Discovered during plan 05-04’s Task 1 second continuation (not one of the five questions above): the full 67-county local release chain’s publish stage raised ValueError for US-FL-COUNTY-LEE FY2022, whose exact total_revenue is $1,048,712,617.15 — write_government_data.py’s five whole-dollar guards each required their own published figure to be exactly integral, raising rather than rounding, whenever the source archive’s own arithmetic carried a sub-dollar remainder.

A corpus-wide, read-only scan of every government-year-figure protected by these five guards — total_expenditures and total_revenue (metrics.parquet, every covered fiscal year, both series), category and revenue-group amount (categories.parquet, each government’s first and last covered fiscal year, both series), and property_tax_revenue (property_taxes.parquet, every non-null year) — found exactly 8 government-year-figures across the whole archive that carry a nonzero cent remainder. Every one is fiscal year 2022; none is a category or revenue-group amount:

Government FY Figure Exact value Rounds to (ROUND_HALF_UP)
Lee 2022 total_revenue $1,048,712,617.15 $1,048,712,617
Miami-Dade 2022 total_expenditures $5,057,995,762.26 $5,057,995,762
Miami-Dade 2022 total_revenue $7,134,886,653.25 $7,134,886,653
Osceola 2022 total_revenue $896,790,206.43 $896,790,206
Palm Beach 2022 total_expenditures $2,430,987,593.63 $2,430,987,594
Sarasota 2022 property_tax_revenue $270,076,080.61 $270,076,081
Sarasota 2022 total_expenditures $703,733,583.49 $703,733,583
Sarasota 2022 total_revenue $782,656,292.21 $782,656,292

Six of the eight round down (Lee’s own $.15 among them); Palm Beach’s total_expenditures and Sarasota’s property_tax_revenue round up — ROUND_HALF_UP applied uniformly, not a rule chosen per row.

Chosen: Round to dollar (option a, maintainer-recommended). Every one of the five whole-dollar guards rounds its exact Decimal value with ROUND_HALF_UP — the same convention _round_int already uses for every other rounded published figure (D-14) — instead of requiring it to already be exactly whole. A new shared helper, _round_whole_dollar_total (with its delta check split out as _assert_rounding_delta_ok for independent testability), still fails closed, naming the government/year/figure, if the value is non-finite or the rounding delta is $1.00 or more — mathematically unreachable through Decimal.quantize(..., ROUND_HALF_UP) itself, since no number is ever more than $0.50 from its own nearest whole dollar, but asserted explicitly as a defensive backstop against a different class of upstream computation error than the expected cents-level noise this rule absorbs. This is a validation-tolerance correction, not a figure-derivation rule: the underlying exact Decimal total is unchanged, and reconcile.py‘s checks — which run earlier, in the validate stage, before publish ever executes — already passed all 23,464 checks against the exact (unrounded) values before this fix; nothing in reconcile.py changed, and no categories-sum-to-headline style check needed adjustment (Rationale). Option “keep raising” (the status quo prior to this decision, which leaves these five governments’ FY2022 permanently unpublishable) is recorded in Rationale’s Considered Options.

Machine-readable lines

The eleven lines below are parsed directly by pipeline/tests/publish/test_methodology_v4.py and pin the values plans 05-03, 05-04, 05-05 and 05-07 compare their own code and contracts against.

empty_leaf_cell_rule: blank_as_zero_leaf_only no_data_year_reason: no_data_reported no_data_year_contract: nullable_with_reason counties_index_path: /data/v1/florida/counties.json counties_index_top_fields: methodology_version, cpi_series, counties counties_index_row_fields: government_id, slug, name, consolidated, first_fiscal_year, last_fiscal_year, dollar_year, latest_spending, ten_year_spending_change, population_change, real_spending_change, real_spending_per_resident, spending_per_resident, population review_disposition_key: government_id, fiscal_year, check, subject, observed_value acknowledgeable_checks: yoy_change_beyond_threshold, zero_population, custodial_share_above_threshold, missing_fiscal_year, unexpected_negative_leaf, unexpected_negative_aggregate negative_leaf_fund_group: governmental sarasota_fy2022_reported_total_correction_row: 26 whole_dollar_cents_rounding_rule: round_half_up

Decision sign-off

Maintainer reply, recorded verbatim: “Accept recommended”

Interpretation (the option the maintainer selected from Task 2’s checkpoint options): option recommended — accept every recommendation in this record as originally proposed: Q1 a (leaf-only blank-as-zero; non-leaf empty string still raises); Q2 a1 (null year with reason no_data_reported, data/audit/coverage-status.csv unchanged plus a dated data/audit/revisions.md entry); Q3 accept the /data/v1/florida/counties.json field list as proposed; Q4 accept the review-disposition schema, five-field match key, six acknowledgeable check ids, thresholds and the governmental negative-leaf scope as proposed.

Recorded: 2026-09-25T19:57:19Z (Task 2 of 05-01-PLAN.md, checkpoint:decision, gate="blocking-human"). This reply is the sole authority for the empty-cell rule, the no-data- year rule and shape, every counties.json field name, and the review-disposition schema recorded in this Decision section — T-03-26’s mitigation: a rule that changes a published figure and a permanent field name are never chosen by the agent alone.

Decision sign-off (Q5)

Maintainer reply, recorded verbatim: “a: Correct it (Recommended)”

Interpretation: option a — correct Sarasota FY2022 revenues row 26’s (324.XXX) source double-count via a narrowly-scoped, keyed exception to the reported total, exactly as this record’s Q5 subsection describes; never a tolerance widening, an exclusion of the county, or a generic rule.

Recorded: 2026-09-25T21:03:58Z (plan 05-04-PLAN.md Task 1 continuation, checkpoint:decision, gate="blocking-human", raised after Task 1’s full local release chain surfaced this finding). This reply is the sole authority for the Sarasota FY2022 reported-total correction — T-03-26’s mitigation: a rule that changes what a published-adjacent validation check compares against is never chosen by the agent alone.

Decision sign-off (Q6)

Maintainer reply, recorded verbatim: “a: Round to dollar (Recommended)”

Interpretation: option a — round every published whole-dollar total that carries cents to the nearest dollar using ROUND_HALF_UP, exactly as this record’s Q6 subsection describes; never a tolerance widening on the publish-stage guard’s own comparison, and never a scope exclusion of the affected governments.

Recorded: 2026-09-25T21:26:21Z (plan 05-04-PLAN.md Task 1’s second continuation, checkpoint:decision, gate="blocking-human", raised after the Sarasota Q5 fix’s own full local release chain re-run surfaced Lee FY2022’s cents figure). This reply is the sole authority for rounding a published whole-dollar total that carries cents — T-03-26’s mitigation: a rule that changes a published figure’s computed value is never chosen by the agent alone.

Rationale

Every recommendation above follows the same reasoning ADR-0008 and ADR-0009 already used: prefer the option that keeps every dollar attributed to a named, auditable rule rather than folded into an undifferentiated bucket or silently dropped, and prefer the option that lets the largest number of the 67 counties actually publish without either fabricating a number or crashing the pipeline. Q1’s leaf-only rule is the narrowest fix that unblocks Liberty and Monroe without weakening the non-leaf raise that catches a genuinely corrupt total-row cell. Q2’s null-with-reason option is the only one of the three that neither fabricates a number nor silently changes the years array’s row-per-covered-year invariant every other government’s page already relies on. Q3 reuses existing, already-tested model shapes rather than inventing new field names for figures that already have one. Q4’s governmental-only negative-leaf scope and the five-field disposition key are what the measured flag volumes above are actually sized against — widening either without re-sizing the checkpoint would surprise the maintainer with a materially larger review burden than this record describes (05-RESEARCH.md Pitfall 2). Q6’s ROUND_HALF_UP rule reuses _round_int’s own existing convention rather than inventing a second whole-dollar rounding rule, and applies uniformly across all five whole-dollar guards rather than special-casing the two headline totals — the corpus scan found a real cents-bearing property_tax_revenue (Sarasota) that the same inconsistency would otherwise have left unpublishable even after Lee’s fix.

Considered Options

Recorded here, not repeated in the Decision section above: Q1 option b (keep raising, leaves two counties permanently unpublishable); Q2 option a2 (omit-with-list, changes array-length semantics) and option b (publish $0, explicitly rejected by D-03); Q3’s edit/drop-population alternatives (no specific edit is proposed pending the maintainer’s own preference); Q4’s broader “every fund group” negative-leaf scope (93/95-pair volumes shown above for comparison, not proposed as the default scope); Q5 option b (widen RECONCILIATION_TOLERANCE_DOLLARS past $1.00 so Sarasota’s $34.3M/$23.8M diffs pass) and option c (drop Sarasota FY2022 from publish_scope) — both rejected as exactly the moves mode_notes’ stop rule forbids (T-03-26), and option b would additionally mask a genuine future divergence on every other government’s reconciliation check; Q6’s “keep raising” status quo (leaves Lee, Miami-Dade, Osceola, Palm Beach and Sarasota’s FY2022 permanently unpublishable — SC1 unmet for five more of the 67 counties).

Source Evidence

Q1 evidence: every empty-string leaf cell found (21 of 21, exhaustive)

Government Series FY Row Account Fund type Fund group
Liberty revenues 2023 72 351.5 General governmental
Liberty revenues 2023 72 351.5 Debt Service governmental
Liberty revenues 2023 72 351.5 Capital Projects governmental
Liberty revenues 2023 72 351.5 Permanent governmental
Liberty revenues 2023 72 351.5 Enterprise proprietary
Liberty revenues 2023 72 351.5 Internal Service proprietary
Liberty revenues 2023 72 351.5 Pension fiduciary
Liberty revenues 2023 72 351.5 Trust fiduciary
Liberty revenues 2023 72 351.5 Private Purpose fiduciary
Liberty revenues 2023 72 351.5 Component Units component_unit
Monroe revenues 2024 87 361.1 Permanent governmental
Monroe revenues 2024 87 361.1 Custodial fiduciary
Monroe revenues 2024 87 361.1 Pension fiduciary
Monroe revenues 2024 87 361.1 Trust fiduciary
Monroe revenues 2024 87 361.1 Private Purpose fiduciary
Monroe revenues 2024 92 369.9 Debt Service governmental
Monroe revenues 2024 92 369.9 Permanent governmental
Monroe revenues 2024 92 369.9 Custodial fiduciary
Monroe revenues 2024 92 369.9 Pension fiduciary
Monroe revenues 2024 92 369.9 Trust fiduciary
Monroe revenues 2024 92 369.9 Private Purpose fiduciary

Zero empty-string cells found on any sheet’s own total row (Total - All Account Codes), across all 134 covered-year workbooks. Total cells scanned: 1,097,659.

Reconciliation under the proposed rule (blank leaf → $0.00), every fund column, both sheets — every diff is exactly $0.00:

Liberty FY2023 revenues: General, Special Revenue, Debt Service, Capital Projects, Permanent, Enterprise, Internal Service, Custodial, Pension, Trust, Private Purpose, Component Units — 12 of 12 fund columns reconcile to the sheet’s own total row exactly. Governmental Total Revenue (ADR-0008 scope, 381/382 excluded — neither present on this sheet’s governmental columns): $26,508,391.00.

Monroe FY2024 revenues: the same 12 fund columns all reconcile exactly. Governmental Total Revenue (same scope): $408,031,532.00.

Q2 evidence: every whole-sheet-zero government-year-series found (1 of 1,340, exhaustive)

Government Series FY Governmental leaf SUM Whole-sheet leaf SUM (all fund groups)
Jefferson expenditures 2018 $0.00 $0.00
Jefferson revenues 2018 $0.00 $0.00

Jefferson’s adjacent covered years are real: FY2017 expenditures $21,337,587.00 (governmental headline, transfer codes excluded) / revenues $20,317,385.00; FY2019 expenditures/revenues both real and non-zero (ADR-0009’s own Jefferson evidence table records the exact figures). Jefferson’s FY2015 and FY2024 endpoints — the only ten-year window Jefferson can publish — are both real, non-zero years; the ten-year window is unaffected by the FY2018 null-year rule.

Q4 evidence: negative leaf rows and YoY flags

See tables in the Decision section’s Q4 subsection above — reproduced here rather than twice, per this record’s own economy: the custodial-share recount, the governmental/all-fund-group and with/without-root-361 negative-leaf counts, the FY2022 root-361 breakdown, and the two-flag YoY table are all Source Evidence for Q4’s proposal, not separately restated.

Q5 evidence: the one \d+\.XXX hit and its reconciliation, before and after correction

A corpus-wide scan of every archived workbook’s label columns (all 134 workbooks, both series, every covered fiscal year) for an account-code label matching \d+\.XXX found exactly one hit:

Government Series FY Row Account label Account name
Sarasota revenues 2022 26 324.XXX Impact Fees - Total

Row 26’s own printed values, and the leaf rows they duplicate:

Fund column Fund group Row 26 value Duplicated leaf rows (root 324)
Special Revenue governmental $34,281,953.00 17 (324.11), 18 (324.12), 21 (324.31), 22 (324.32), 23 (324.61), 24 (324.91), 25 (324.92)
Enterprise proprietary $23,783,293.00 19 (324.21), 20 (324.22)

Every other fund column on this row (General, Debt Service, Capital Projects, Permanent, Internal Service, and every fiduciary/component-unit column) reads $0 — the double-count is scoped to exactly these two fund columns.

Before correction (fund_columns_reconcile_to_reported_totals, check_fund_columns):

Check Derived (leaf sum) Reported (sheet total row) Diff
fl-edr-sarasota-revenues FY2022 governmental/special_revenue $403,942,141.48 $438,224,094.48 −$34,281,953.00
fl-edr-sarasota-revenues FY2022 proprietary/enterprise $272,580,280.97 $296,363,573.97 −$23,783,293.00
revenues_headline_matches_governmental_minus_exclusions US-FL-COUNTY-SARASOTA FY2022 computed $782,656,292.21 expected $816,938,245.21 −$34,281,953.00

After correction (this task’s automated re-run of the full local release chain, pipeline/tests/adapters/test_edr_workbook.py::test_exhaustive_sarasota_fy2022_reported_total_correction_reconciles_exactly): all three checks reconcile to an exact $0.00 diff — the corrected reported totals ($403,942,141.48 special_revenue, $272,580,280.97 enterprise) equal the leaf-derived sums exactly, to the cent, not merely within the $1.00 tolerance.

Q6 evidence: the corpus-wide whole-dollar cents scan (8 of 8, exhaustive)

A read-only scan, run against the real data/parquet/{metrics,categories,property_taxes}.parquet produced by a full 67-county run.py chain through the categorize stage (post-Q5 correction, post-scope-widening), of every government-year-figure protected by write_government_data.py’s five whole-dollar guards, reproduced from the Decision section’s Q6 table above rather than twice: 8 government-year-figures carry a nonzero cent remainder, all fiscal year 2022, none a category or revenue-group amount. Pinned exactly by pipeline/tests/publish/test_publish_writer.py::test_corpus_wide_whole_dollar_cents_scan_matches_adr_0010_q6_pin (archive-marked, skips without the real data/parquet/ present, fails instead of skipping under TAXPAYERSCOPE_REQUIRE_ARCHIVE=1) — a future archive re-run that introduces a new cents-bearing figure fails this pin rather than silently rounding one nobody reviewed, the same discipline Q1’s _KNOWN_FULL_PARSE_FAILURES pin already applies to the empty-cell rule.

Methodology Version

This decision took effect in methodology_version: 4. Q1 and Q2 both change how a published figure is derived (an empty-cell parsing rule and a null-year rule), which is the same bar ADR-0008 (v2) and ADR-0009 (v3) each crossed — a version bump, not a same-version patch. active_methodology_version returned 3 while this record’s status was proposed; it now returns 4 following the maintainer’s recorded Task 2 decision (Decision sign-off, above) and Task 3’s coordinated bump across every other active decision record.

Revision (2026-09-25)

Same-day activation record, for the same visible-diff discipline every other active record in this directory carries: Task 1 wrote this record as status: proposed with all four questions quantified and no option chosen; Task 2 (checkpoint:decision, gate="blocking-human") obtained the maintainer’s reply the same date; Task 3 rewrote the Decision section to the chosen options only, moved rejected alternatives into “Considered Options” under Rationale, added the Machine-readable lines subsection and the Decision sign-off section quoting the reply verbatim, and flipped status to active at methodology_version: 4 — all recorded here as one dated, diffable event rather than an untracked same-day edit. This revision recorded by Task 3, 05-01-PLAN.md.

Revision (2026-09-25) — Q5 Sarasota FY2022 324.XXX source double-count

Same-day, second dated event: plan 05-04-PLAN.md Task 1’s full local release chain surfaced exactly 3 failing checks (all Sarasota County FY2022 revenues), traced to the source workbook’s own row-26 324.XXX subtotal being double-counted in its Total - All Account Codes row (Q5 evidence above). A checkpoint:decision (gate="blocking-human") presented the finding and three options (correct it / widen the tolerance / exclude the county); the maintainer chose “a: Correct it (Recommended)” the same date (Decision sign-off (Q5), above). This revision adds the Q5 subsection, its machine-readable line, its Decision sign-off, its Considered Options entries and its Source Evidence subsection — status stays active and methodology_version stays 4 unchanged, since no published /data/v1/ figure is affected (Q5 subsection, above). Implemented in pipeline/adapters/florida/reported_total_corrections.json and pipeline/adapters/florida/parsers/edr_workbook.py’s _apply_reported_total_corrections, with RED/GREEN tests in pipeline/tests/adapters/test_edr_workbook.py proving the correction reconciles exactly, is scoped to its exact key, and fails closed on a drifted amount. This revision recorded by 05-04-PLAN.md Task 1’s continuation.

Revision (2026-09-25) — Q6 published whole-dollar guard cents (round to dollar)

Same-day, third dated event: plan 05-04-PLAN.md Task 1’s second continuation re-ran the full local release chain after the Q5 Sarasota fix and hit a new publish-stage failure — US-FL-COUNTY-LEE FY2022’s exact total_revenue, $1,048,712,617.15, carries cents, which write_government_data.py’s whole-dollar guards rejected outright (Q6 evidence above). A corpus-wide scan (Q6 evidence) found 7 more government-year-figures with the same property, all FY2022. A checkpoint:decision (gate="blocking-human") presented the finding; the maintainer chose “a: Round to dollar (Recommended)” the same date (Decision sign-off (Q6), above). This revision adds the Q6 subsection, its machine-readable line, its Decision sign-off, its Considered Options entry and its Source Evidence subsection — status stays active and methodology_version stays 4 unchanged: the underlying exact Decimal total each guard protects is unchanged, reconcile.py’s checks continue to compare exact Decimal values in the validate stage (unmodified, and already passing all 23,464 checks before this fix), and only the publish-stage guard’s own tolerance for its own comparison changed — the same “validation correction, not a figure-derivation rule” bar Q5 already crossed at this same version. Implemented in pipeline/publish/write_government_data.py’s _round_whole_dollar_total and _assert_rounding_delta_ok, applied uniformly across all five whole-dollar guards (headline expenditures/revenue, category, revenue-group, property-tax), with RED/GREEN tests in pipeline/tests/publish/test_publish_writer.py proving a cents amount rounds ROUND_HALF_UP, a non-finite or implausible-delta value still fails closed, and an archive-marked pin of the corpus scan’s exact 8-figure set. This revision recorded by 05-04-PLAN.md Task 1’s second continuation.