# ELECTION-01 protocol draft v0.1.0-draft

**STATUS:** PROPOSAL — pending independent Claude review.  
**MODEL_CHANGE:** NO  
**SRP_SCORING_CHANGE:** NO — L1/M1 `score_authorized` untouched.  
**FITTING:** NOT AUTHORIZED  
**OUTCOME_TESTING:** NOT_YET_AUTHORIZED  

Hub authorization: comment `80b724f8` on job `b73c292a` (James/Codex).  
Integrity gates: comment `fb4c1bc0` — contract sha256 `145046ff15faa3f6d71e07c817f1d68b4a8addcd7bafea6dbb98a44a0ba4227b`.  
Astra conditional relay: `17924a21` — `CONDITIONAL_ACCEPT_BEFORE_MODEL_FITTING`; still requires PIT source audit + freeze.

## Canonical hashed fields

`protocol_fields_sha256` = `5833965da9b9790ebb657029ba69cb248ab51d2ea359ecc518451b504a5e584f`  
(canonical JSON: sort_keys=True, separators=(',', ':'), UTF-8 — see companion JSON)

## Target (proposal)

US presidential **national** Democratic−Republican two-party popular-vote margin:

`100*(D-R)/(D+R)` percentage points.

- Predicts a vote **margin**, not Electoral College winner.
- State/congressional/turnout = later separate targets (not pooled substitutes).

## Cutoff / timezone (proposal until Claude reviews)

- **Primary:** 60 calendar days before election day.
- **Sensitivity only:** 30-day (separately labeled; cannot replace primary after results).
- **Timezone:** `America/New_York`, end-of-day inclusive at T−horizon, frozen in executable spec.

## Integrity contract (incorporated; required acceptance)

Full text and executable obligations: `/docs/election01-integrity-contract`  
sha256 `145046ff15faa3f6d71e07c817f1d68b4a8addcd7bafea6dbb98a44a0ba4227b` (must match Hub `fb4c1bc0` evidence id).

Required before any fit:

1. Independently reviewed hashed protocol (this document + fields JSON).
2. Attempt ledger of every variant/failure/exclusion/amendment.
3. Availability evidence for every predictor/vintage at each cutoff.
4. Fit/eval separation; hash predictions before joining test labels.
5. Executable negative controls with actual outputs.
6. Full reporting (per-election errors, missingness, attempts).
7. Independent reviewer (≠ proposer) for leakage/reproduction; **proposer cannot self-certify REPLICATED**.
8. Failed provenance/timing/reproducibility ⇒ BLOCKED/exploratory; preserve null findings; no novel predictive-power claims from retrospectives.

## Local comparison ladder (NOT SRP M1)

Labels **M0–M4** are local ELECTION-01 comparison labels only — **not** canonical SRP M1 authorizations.

| Label | Meaning |
|-------|---------|
| M0 | Prior-election margin or historical mean (prechosen) |
| M1_local | Transparent poll-only at exact T−60 |
| M2_local | Parsimonious fundamentals-only (≤2–3 preregistered) |
| M3_local | Polls + fundamentals |
| M4_local | M3 + exactly one preregistered SRP-adjacent feature |

Paired comparison on **identical eligible cycles**. If M4_local does not improve on M3_local under tiny-n uncertainty → no demonstrated incremental value; do not rescue with another feature (that is ELECTION-02 exploratory).

## Baselines (from Codex proposal)

- **Baseline0:** prior-election two-party margin (then-known only).
- **Baseline1:** national LV polls in the 30-day window ending at the 60-day cutoff; one selected question per poll/sample; average within pollster then equally across pollsters; if <3 independent pollsters → `MISSING` (do not silently widen).
- **Baseline2:** polling+fundamentals conditional on validated historical releases; feature list frozen after coverage, before fits.

## Backtest unit

Whole election cycles. Expanding chronological training. Transformations/imputation/regularization/calibration learned only inside prior cycles. Report per-cycle predictions/errors with exact input vintage/cutoff and training years. n≈15 max before exclusions — do not manufacture n from poll rows.

## Executable negative controls (listed; outputs not yet run)

1. Reject released-after-cutoff even if fieldwork earlier.
2. Reject revised vintages unavailable at cutoff; never derive features from target-election results.
3. Deduplicate overlapping poll variants; verify population/geography/candidate set.
4. Fold features/transforms/training labels cannot access held-out election.
5. Outcome joins use unique election/geography/party keys; reconcile to official totals.
6. Permuting held-out labels cannot change fitted predictions or feature selection.
7. Baselines/candidate compare identical test cycles; missingness/exclusions visible.
8. Reject HTML served as CSV (Codex incident recorded).
9. Every result has source/script/protocol hashes and survives independent reproduction.

## Non-claims

- No model fitting performed.
- No claims of predictive power.
- Null/insufficiency path preserved.
- Historical outcomes are public: careful retrospective ≠ genuinely blind prospective test.
- Separate from SRP scoring / Exp002 / L1–M1 authorizations.

## Next actions

1. Claude: independent protocol/leakage/cycle-count/baseline-fairness review → accept/revise.
2. Grok: complete per-cycle availability matrix; freeze eligible cycles; record licenses.
3. Codex: code/synthetic QA of temporal validators may proceed; **no observed election association search** before protocol gate.
