# 2026-07-10 — Pre-registration: county-pair calibration methodology

Registered **before any county lock can exist**, and anchored independently (see
`calibration/ANCHORS.md`). This document does NOT modify, reinterpret, or supersede any anchored
text. `calibration/hypothesis_log.md` and `calibration/shadow_adjustments.json` remain byte-identical
to their OpenTimestamps-anchored digests. Nothing here touches a lock, `locks.log`,
`certified_results` for statewide contests, or any statewide client-facing number.

County scoring is the calibration n-engine: one statewide general contest certifies by county, so it
can yield many out-of-sample pairs instead of one. Because those pairs deepen the ledger the
prediction intervals draw on, their methodology must be fixed before the first county lock — otherwise
the county assignment, the thin threshold, and which counties count could be chosen after the result
to flatter the number.

## 1. County assignment source

A confirmed account is assigned to **at most one** county by resolving its **self-disclosed profile
location** (`confirmed_accounts.location_text`, the same field the residence gate already read) to a
county:

1. The account's `location_text` (falling back to `bio_text`) is matched, case-insensitively, against
   the market's configured localities and place names (`GeoScope.localities`, `GeoScope.place_names`).
2. The matched locality resolves to its county via an **operator-maintained place→county map** (one
   per market, committed alongside `MarketConfig`). A locality with no county mapping, or an account
   with no resolvable location, is **UNASSIGNED** and contributes to **no** county pair.

No post text, no geo-tag, no inferred location: county assignment reads the same self-disclosed
residence signal the account was confirmed on. Assignment is deterministic and auditable — given the
same `location_text` and the same place→county map, an account always lands in the same county or in
UNASSIGNED.

## 2. Which counties count (thin threshold)

A county contributes a pair only when its assigned **decided** pool clears
`county_scoring.MIN_COUNTY_DECIDED_ACCOUNTS = 10` distinct decided accounts. Below that the county is
**dropped, not down-weighted** — a share computed from a handful of accounts is noise, and a ledger
padded with noise would make the prediction interval look earned. The drop count is reported
(`county_yield.n_dropped_thin`), never silent.

## 3. Lock timing

County pairs lock under the **same anchored T-7 auto-lock policy** as statewide
(`calibration.lock_policy`): at T-7 a market that clears its statewide density threshold captures its
per-county dome shares into county `calibration_pair` rows (`lock_county_pairs`), with locked columns
filled and certified NULL. The capture is mechanical and blind to the eventual result. Certified
county actuals fill the pairs after the election (`record_county_results`).

## 4. The stratum ruling (ruling 2c)

County pairs form **their own stratum**: `race_type = general`, `grain = county`, carried on the
`county` column of `calibration_pair`. They are read only via
`load_certified_pairs_for_race_type(grain="county")`; every statewide consumer defaults to
`grain="statewide"` (`county IS NULL`) and therefore **never sees a county pair**.

Consequently:

* **County intervals compute per grain.** `prediction_interval_for_race_type(grain="county")` is a
  separate number over separate evidence from the statewide interval.
* **County pairs do NOT satisfy the statewide `MIN_CALIBRATION_N` gate.** They cannot promote a
  statewide live-emission adjustment, a statewide dome-to-electorate mapping state, or a statewide
  interval out of `insufficient_record`.
* **Promoting county evidence into a statewide gate requires a future, separately-stamped addendum.**
  Until such an addendum exists and is anchored, the strata never mix.

## 5. Scope and exclusions

* **November 2026 generals only**, and **us_arizona is excluded by name** — its statewide pair
  (`72bda729`) is locked and Bitcoin-anchored, and county-scoring it would re-weight an anchored
  prediction. `county_scoring.county_eligible` refuses AZ before anything writes, and
  `lock_county_pairs` refuses on the same check.
* This methodology governs the county STRATUM only. The statewide AZ scoring path is untouched by
  construction — county code writes `calibration_pair` rows with `county` set and never a
  `LockedPrediction`, `locks.log` line, or statewide score.

## 6. Confidence

**None yet — n = 0 county pairs.** The rule exists so that when the first November county results land,
the assignment, threshold, timing, and stratum boundary are already fixed and cannot be chosen to
flatter the result.
