RUN -m unittest discover -s tests -v
test_covered_zero_and_unknown_are_different (test_analysis.PanelTests.test_covered_zero_and_unknown_are_different) ... ok
test_frame_omission_fails (test_analysis.PanelTests.test_frame_omission_fails) ... ok
test_invalid_identity_prevents_readiness (test_analysis.PanelTests.test_invalid_identity_prevents_readiness) ... ok
test_possible_duplicate_blocks_month (test_analysis.PanelTests.test_possible_duplicate_blocks_month) ... ok
test_school_year_mismatch_blocks_count (test_analysis.PanelTests.test_school_year_mismatch_blocks_count) ... ok
test_state_mandate_is_separate (test_analysis.PanelTests.test_state_mandate_is_separate) ... ok
test_unknown_month_blocks_year (test_analysis.PanelTests.test_unknown_month_blocks_year) ... ok
test_reconciliation_and_rates (test_analysis.SummaryTests.test_reconciliation_and_rates) ... ok
test_reject_mismatched_geography (test_analysis.SummaryTests.test_reject_mismatched_geography) ... ok
test_blank_locations_are_auditable (test_reconciliation.ReconciliationTests.test_blank_locations_are_auditable) ... ok
test_duplicate_record_is_retained_not_collapsed (test_reconciliation.ReconciliationTests.test_duplicate_record_is_retained_not_collapsed) ... ok
test_header_differences_preserve_first_event (test_reconciliation.ReconciliationTests.test_header_differences_preserve_first_event) ... ok
test_ohio_is_no_index_entries_not_proof_of_absence (test_reconciliation.ReconciliationTests.test_ohio_is_no_index_entries_not_proof_of_absence) ... ok
test_preserves_blank_title_record (test_reconciliation.ReconciliationTests.test_preserves_blank_title_record) ... ok
test_same_counts_different_records_fail (test_reconciliation.ReconciliationTests.test_same_counts_different_records_fail) ... ok
test_sheet_views_are_not_combined (test_reconciliation.ReconciliationTests.test_sheet_views_are_not_combined) ... ok

----------------------------------------------------------------------
Ran 16 tests in 0.291s

OK
RUN analysis/reconcile.py
{
  "workbook_sha256": "b5222b5b87fc2ad66c58a22b726eed1ed9169ccfb5e66acbea2b23074981aafe",
  "selected_sheet": "Sorted by Author & Title",
  "sheet_event_multisets_equal": true,
  "event_rows": 3362,
  "nonblank_title_rows": 3361,
  "states_with_records": 33,
  "extra_identical_records_retained": 0,
  "blank_title_source_rows": [
    {
      "sheet": "Sorted by State & District",
      "source_row": 3363,
      "state": "Texas",
      "district": "Frisco Independent School District"
    },
    {
      "sheet": "Sorted by Author & Title",
      "source_row": 602,
      "state": "Texas",
      "district": "Frisco Independent School District"
    }
  ],
  "blank_title_policy": "Retain source entry in event-row count; report nonblank-title count separately. Do not invent a title.",
  "duplicate_policy": "Keep original rows. Compare the two sheet views without concatenation or automatic deduplication.",
  "limits": [
    "Published-summary arithmetic is not an independent row-level replication of 2024-2025.",
    "Historical regression and affiliations not refitted; original inputs absent.",
    "Independent comparison output not supplied; exact discrepancy not established."
  ]
}
RUN analysis/analyze.py
PASS: 6,870 current instances; 22,810 across four years; geographic totals reconciled.
Completed requested checks. Read results/audit.json for limits; no historical model was fitted.
