# Pre-registration: are rising business power needs (data centres) raising household electric bills?

**Status: v1.0, BINDING** (Grady, 2026-09-29; tagged `prereg-v1`, hashes in `docs/prereg-v1.sha256`, timestamped with OpenTimestamps per §9. History: v0.4 recorded the Phase 1c findings; v0.5 settles the 8 points Entra found while coding, see §10; v0.6 changes the gas control and records the Phase 3 pipeline facts, see §11; v0.7 applies Zero's pre-lock review, `scratch/p4-zero.md`, see §12). This adopts all 19 of Zero's required changes from the v0.2 review (`scratch/p1b-zero.md`) and moves the primary test nationwide (§0).

The v1.0 conditions are met:
- Zero's re-reviews, `scratch/p7-zero.md` and `scratch/p9-zero.md`;
- Appendices A, A2, A3, B, B2 and C frozen;
- the MDE filled in (§7, $5.41);
- the outcome code tested on synthetic data only and hash-frozen (§9).

**No one runs any outcome comparison before v1.0 is tagged and externally timestamped (§9).**

## 0. What we knew beforehand, and why the design changed
- **What we had already seen:** before v1.0 the team had read news coverage of rising PJM, Virginia and Maryland bills and of PJM's 2025/26 capacity auction. **Outside PJM (reconstructed from the team's written record, `uni/research/brainstorm-2026-09-28/` and `docs/EXPOSURE.md` §3.4 national check):** the brainstorm cited reporting that Texas paused new ERCOT grid connections on 2026-08-03, with data centres about 90% of the queue, and the hyperscalers' 2026 capital-spending guidance. The national construct-validity check named Georgia (Atlanta), Arizona (Phoenix), Texas and Oregon (Portland General Electric) as known data-centre hubs. No bill or price news for any utility outside PJM appears in the record. **We don't claim ignorance beyond that.** The team includes AI assistants with general background knowledge of widely reported data-centre locations. That's why the exposure measure is fixed volumes from 2019–2022, and High and the sample were frozen from exposure tables with no price comparison.. Entra had also inspected, with no price join, PJM's 2026 load-forecast tables, which show which zones' data-centre forecasts grew most. Those are the reasons for our two guards against that knowledge: the exposure vintage rule and the drop-Virginia check (near-vacuous since PJM left the primary test: it drops one low-exposure unit, §5).
- **Why the design moved nationwide (v0.2 → v0.3):** PJM's 2023 forecast attributes data-centre load to only 3 zones (DOM, APS, AEP), and the 2024 forecast to only 4. Both fall below the 5-zone minimum for a statistical test (§4). So:
  - **PJM becomes a descriptive case study** (§6, row 1).
  - **The primary test moves nationwide,** using a broader exposure measure (§3).
  - **No outcome data drove this change.** It was decided from the exposure tables alone, and no prices were examined.
- **Later design changes, all decided without outcome comparisons:** Alaska and Hawaii excluded, the bundled-only rule (v0.4); the P0-4 validator threshold (v0.6, §11); the gas control switched to 2019 gas share × Henry Hub because the state series is 39% withheld (v0.6, §2); the merger sweep (v0.7, §2). Each was decided from exposure tables, sample tables or missing-value counts.
- **The honest cost:** the nationwide measure is **growth in business electricity use**. That includes data centres but also factories, electrification and the rebound after COVID. The headline therefore talks about "fast-growing business power demand", and it names data centres only to the extent that the construct-validity check (§3.4) supports it.

**v0.4: Phase 1c findings.** Every item below comes from exposure and sample tables only, with no prices viewed by a person. The exception is the MDE item, which an automated simulation computed from 2015–2023 prices (§7); only the summary MDE and P̄ were read.
- **Bundled service can only be identified in EIA-861 *annual*** (`Sales_Ult_Cust`, `Service Type` ∈ {Bundled, Delivery, Energy}), never in the monthly 861M. A unit therefore qualifies only if **100% of its residential sales are Bundled in every annual vintage from 2015 to 2024**. The consequence, stated on the site: **the test covers utilities that sell both the power and the delivery.** That excludes retail-choice areas, meaning most of PJM, Texas's ERCOT, New York, New England and California's three large utilities.
- **Alaska and Hawaii are excluded.** They aren't connected to the continental grid, Hawaii's prices follow oil rather than gas, and the grid-market channel doesn't apply to them. High is recomputed within region after this exclusion.
- **Regions below the size rule are dropped:** PJM has only 4 High units (under 5), and CISO, ISNE and Census-Midwest have 1 unit each. PJM remains as the §3.5 descriptive case study.
- **The §3.4 construct-validity gate fails, so the wording rule applies.** Spearman ρ = 0.447 (p = 0.042, 21 zones), and DOM and AEP rank in the top two on both measures, but APS ranks 12th of 21 by g. The site must say "**fast-growing business power demand**" and may mention data centres only as one of several contributors.
- **The MDE was about 4.6% (0.046 log points), roughly $6.41 a month** at Phase 1c (placebo simulation with random labels; `data/derived/power_mde_national.csv`). Recomputes on the frozen Appendix A gave $5.42 (Phase 2) and $5.41 (v0.7). §7 carries the value that is binding.

## 1. The question, in plain words
Have household electricity prices risen **more** at utilities whose business customers' electricity use was growing fastest before 2024 than at similar utilities in the same region, after allowing for gas prices and region-wide changes?

**What this can show:** whether bills pulled away from comparable areas after the post-2023 surge in large new electricity demand, of which data centres are the headline part.
**What it cannot show:** that a particular data centre raised a particular bill, or what any one family's bill "would have been". The site says so.

## 2. Data and sample
**Outcome:** the monthly average **residential price** for each unit = total residential revenue ÷ total residential sales from EIA-861M, in ¢/kWh. EIA-861M can't separate bundled from delivery-only or energy-only sales (Phase 1c), so the outcome is restricted by sample instead: only units that are **100% Bundled in every EIA-861 annual vintage from 2015 to 2024** qualify (below), and for them total revenue ÷ sales *is* the bundled price. A month with revenue = 0 and positive sales is missing (see the vintage rules below).

**Unit:** one EIA-861M utility-state row.

**Primary sample (Appendix A, part of v1.0):**
- investor-owned utilities;
- with ≥10,000 residential customers (the mean of 2023 monthly counts);
- with a valid bundled residential price in ≥90% of months **in both** 2015-01–2023-12 **and** 2024-01–2026-06;
- with 100% Bundled residential service in every EIA-861 annual vintage from 2015 to 2024;
- in the contiguous US (Alaska and Hawaii excluded);
- excluding EIA adjustment and imputation rows, power marketers, co-ops and municipal utilities. Co-ops and munis are a robustness check.

**Panel window and vintage:**
- The panel runs **2015-01 to 2026-06**.
- Values come from the EIA-861M files already fetched before v1.0 (Phase 1 and Phase 3 pulls, in `data/derived/fetch_manifest.csv`). Their SHA-256 hashes are listed in `docs/prereg-v1.sha256` and written again into `analysis/RUNLOG.md` before any model is fitted. A later EIA revision is used only through the "Final EIA values" robustness row.
- Preliminary months are included. When the final values arrive, the unchanged analysis is re-run and reported as a robustness check. The headline changes only through the claim-drift review (THREAT-MODEL §2.3).
- A month with sales ≤ 0, revenue < 0, or revenue = 0 with positive sales is treated as missing. EIA published no EIA-861M data for 2017-08 to 2017-12, so the panel has 133 of 138 months. There is no winsorising or trimming, and units are unweighted.

**Mergers:**
- If sample units merge during 2015-01–2026-06, their revenue and sales are summed into one unit for the whole panel.
- If the merging units have different High status, the combined unit is excluded from the primary test, and Appendix A lists it with the reason.
- Otherwise the merged unit keeps its status, and its exposure is the sales-weighted combination.
- **Merger list (v0.7):** every row of EIA's `Mergers_2015..2024` tables that names a sample unit (18 rows) was reviewed, along with utility-number consolidations visible in the monthly sales files. Three consolidations are spliced:
  - FirstEnergy PA 66101, 2024-01 (not in the sample);
  - Entergy Gulf States-Louisiana 55936 → Entergy Louisiana 11241, 2015-10;
  - Gulf Power 7801 → FPL 6452, 2022-01. The Mergers tables have no row for this one; the date comes from the monthly sales files, where 7801 stops after 2021-12.
  The other rows are ownership changes, asset purchases or customer sales and need no splice. `docs/appendix_A2_mergers.csv` gives the reason for each row, and `docs/appendix_A2_merger_effects.csv` the exposure-only before/after. The sweep used exposure and sales-volume data only.

**Region:**
- A utility's region is its RTO if its 2022 EIA-861 BA Code is an RTO: PJM, MISO, ERCOT, SPP, NYISO, ISO-NE or CAISO.
- Otherwise its region is the Census region of its state.
- The assignment is frozen in Appendix A.

**Gas control (v0.6):**
- **Primary:** `gasShare[state(u)] × ln(HenryHub[t])`. `gasShare` is the natural-gas share of the state's net generation in **2019** (fixed, so it can't respond to the treatment). HenryHub is EIA's monthly Henry Hub spot price. The main effect of HenryHub is absorbed by the region×month effects, so this term captures the **extra** price exposure of gas-heavy states when gas moves. It has no missing values.
- **Why the change:** the state series `N3045<ST>3` is withheld by EIA for 39% of unit-months (Phase 3, counts only). Filling those with the US figure makes that control mostly a guess.
- **Robustness:** the `N3045<ST>3` control with US fill (flagged), and no gas control at all. In-state gas prices may partly be a *channel* for demand.
- **DC and state mapping:** DC uses Maryland. The state is the unit's state.
- **Source:** EIA's annual state generation table (`annual_generation_state.xls`, total-electric-industry rows, 2019), where "gas" = natural gas ÷ total. The file's hash is in the manifest, and the shares are listed in `docs/appendix_B2_gas_share.csv` (range 0.018–0.741).

## 3. Exposure (the "treatment")
**3.1 Rule: no look-ahead.** Exposure uses only information published on or before 2023-12-31.

**3.2 Primary measure (national).**
- g = ln(commercial + industrial MWh in 2022 ÷ commercial + industrial MWh in 2019), for each unit, from **EIA-861 annual** final data.
- The 2022 file was released in 2023; its release date is recorded in the manifest.
- Missing, zero and negative handling, and merger combinations, are listed in Appendix B.

**3.3 Treatment.**
- "High" = the **top third of units within their region** by g. The number High is floor(n_region/3), minimum 1, and ties at the cutoff are counted as High. This is the rule used in Phase 1c and in the frozen Appendix A.
- Secondary: g as a continuous number.

**3.4 Construct validity (checked before v1.0; exposure against exposure only, with no prices):**
- **Within PJM:** the Spearman correlation between zone-aggregated g and PJM's 2024-vintage data-centre intensity across the 22 zones, and where DOM, APS and AEP rank.
- **Nationally:** whether known data-centre hubs appear among the top units by g.
- **Wording rule, fixed now:**
  - If Spearman ≥ 0.4 and all of DOM, APS and AEP fall in the top third, the site may say "areas with fast-growing business demand, **much of it data centres**".
  - Otherwise it says "areas with fast-growing business power demand". It may mention data centres only as one of several contributors, and must not attribute the effect to them.

**3.5 PJM case study (descriptive only).**
- Exposure is the data-centre MW for 2028 in PJM's January 2023 forecast (Table B-9, p.56), divided by the zone's 2028 50/50 summer peak (Table B-10, p.57).
- Adjustments the report attributes to non-data-centre programs are excluded: PL and ATSI (behind-the-meter generation moving to demand response) and EKPC (peak shaving).
- The result is DOM 0.311, APS 0.091, AEP 0.011 and every other zone 0. It's frozen in Appendix B, together with the SHA-256 of the PJM file.

## 4. The test
**Model:** a difference-in-differences comparison on the unit-month panel:
`ln(price[u,t]) = unit[u] + region×month[r,t] + β·High[u]·Post[t] + δ·gasShare[state(u)]·ln(HH[t]) + error`
- `Post` = 1 from **2024-01** onward.
- **What β means:** how much higher, in percent, prices at High units were from 2024 on than before, beyond the change at comparable units in the same region. It's a *level shift* ("rose more"), not a growth rate.
- **Dollars:** $X = (e^β − 1) × P̄ × 899 kWh.
  - P̄ is computed per High unit as the mean of its twelve monthly 2023 prices, then averaged unweighted across High units, in $/kWh.
  - 899 kWh a month is EIA's 2022 US average (EIA FAQ id=97).
  - Figures are nominal dollars, rounded to $1, and interval ends are rounded the same way. Anything under $0.50 is shown as "under $1".

**Primary inference: randomization inference, stratified by region.**
- Each draw reassigns g across units *within the same region*, recomputes High by the §3.3 rule, and re-fits the full model.
- **Statistic:** the t-statistic of β with unit-clustered CR2 standard errors.
- **Two-sided:** the p-value is (1 + number of draws with |t| ≥ |t_obs|) ÷ 10,000.
- **Draws:** 9,999, with seed 20260928. The smallest achievable p (1/10,000) is printed next to α = 0.05.

**95% interval:** the set of constant effects b that aren't rejected at 0.05 when the same test is run on ln(price) − b·High·Post, over a grid from −0.30 to +0.30 in steps of 0.001.

**Secondary:** CR2 standard errors, and a wild cluster bootstrap by unit (Webb weights, null imposed, 9,999 repetitions).

**Minimum-size rule:** if any region has fewer than 5 High or fewer than 5 low units, that region is dropped from the primary test and the drop is reported. If fewer than 20 High units remain in total, the result is descriptive only.

## 5. Checks (each defined exactly; they run with the primary test)
1. **Pre-trends:** yearly High×year terms for 2015–2022, with 2023 as the reference year. The joint Wald statistic gets its p-value from the stratified randomization inference. **Pass if p > 0.10.** The Wald statistic uses the CR2 covariance. Because pre-trend tests have limited power, a *simplified* Rambachan–Roth relative-magnitudes bound (M̄ from 0.5 to 2, plus the breakdown M̄) is reported alongside. It is reported only and doesn't enter the decision table. Checks 1 and 2 use only 2015–2023 data.
2. **Placebo:** data from 2015-01 to 2022-12, with a fake post date of 2019-01. **Pass if RI p ≥ 0.10.**
3. **Drop Virginia:** drop every unit with State = VA and every unit in the PJM DOM zone.
   - **Disclosed (v0.7):** since PJM left the primary test, this drops only one unit, Kentucky Utilities-VA, which is low-exposure, so the check is close to vacuous. We keep it as written rather than inventing a replacement this late. The guard against a few dominant cases is check 4.
   - **When the primary result is significant (p < 0.05):** pass if β keeps its sign and RI p < 0.10.
   - **When the primary result is not significant (p ≥ 0.05):** pass if the drop-Virginia RI p ≥ 0.05. The check asks whether Virginia is *masking* an effect.
4. **Leave one state out:** drop each state that has a sample unit, one at a time.
   - **When the primary result is significant:** fail if any single drop flips β's sign.
   - **When it is not:** fail if any single drop gives RI p < 0.05. A sign flip near zero is expected and is not a failure.
   - **After any subsample drop** (checks 3 and 4), High is recomputed by the §3.3 rule within region. The ≥5/≥5 region rule is **not** re-applied, so the primary region set stays fixed.
5. **Reported robustness** (these don't change the headline):
   - a post date of 2025-06;
   - g as a continuous number;
   - co-ops and munis added (the **extended sample**: units with EIA ownership Cooperative or Municipal that pass every other primary-sample filter, excluding any unit named in a Mergers table; Political Subdivision, State, Federal and CCA are not included; 124 units, `docs/appendix_A3_extended.csv`). If this row can't run, that's an error, not a skip;
   - weighting by customers;
   - unit×calendar-month effects;
   - the state gas-price control `ln(N3045<ST>3)` with US fill, in place of the primary gas term (flagged: 39% filled);
   - no gas control (in-state gas prices may partly be a *channel* for demand);
   - Final EIA values only, once published.

## 6. What we will say (take the first row that applies)
| # | Result | Headline |
|---|---|---|
| 1 | Descriptive only (minimum-size rule), **and always for the PJM case study** | "Too few areas [had forecast data-centre growth / qualify] to test this statistically. Here is what happened to prices in each." |
| 2 | Check 1 fails | "These areas were already on different paths before 2024, so this data can't answer the question cleanly yet." |
| 3 | β > 0, RI p < 0.05, checks 2–4 pass | "Bills rose more where business power demand was growing fastest [much of it data centres, per §3.4]: about $X a month for a typical home (plausibly $L to $U), compared with similar utilities in the same region." |
| 4 | β < 0, RI p < 0.05, checks 2–4 pass | "Bills rose *less* where business power demand was growing fastest: about $X a month less (plausibly $L to $U)." |
| 5 | p < 0.05 but one of checks 2–4 fails, or 0.05 ≤ p < 0.10 | "There are signs bills moved differently where business demand grew fastest, but we can't yet rule out other explanations." |
| 6 | p ≥ 0.10, checks 2–4 pass | "So far, we don't see fast-growing business demand pushing household bills above similar areas." If the interval's upper end is above $U* (§7), add: "Effects up to $U a month can't be ruled out." |
| 7 | p ≥ 0.10, one of checks 2–4 fails | "We don't see a clear effect, and the checks say this comparison isn't reliable enough to rule one out." |

**Rules for every row:**
- **Name the other suspects.** Every headline sits beside the other suspects, shown as real data series over the same window: state gas prices, the regional CPI, and, for Western utilities, wildfire-related rate requests where a dataset exists. **Capacity prices aren't shown as a rival explanation, because they are part of the demand channel.**
- **Per-utility pages** lead with a description: "A typical home using 899 kWh a month at [utility]'s average residential price pays about $X a month more than in 2023" (the average price is all residential revenue ÷ sales, not a tariff), computed as the mean of the latest 12 months minus the 2023 mean, using the same formula. For a utility **in the primary test**, the group result sits beside it, labelled "the comparison across similar utilities". For a utility **outside the test** (excluded or never eligible), the page shows the scope line and the reason it's excluded, and **not** the group result. There are **no causal statements about individual utilities**, and no "you pay".
- **Null results are published with the same prominence** as positive ones.

## 7. Power (filled in at v1.0)
- The minimum detectable effect is found by simulation on 2015–2023 data only.
- Each simulation assigns High at random within region by the §3.3 rule (**never the real g**), sets a fake post date of 2020-01 and injects a constant effect.
- **The method actually used** (`pipeline/power.py`) is a lighter version of the §4 test, for speed: the statistic is the raw β estimate (not the CR2 t), with 999 stratified permutations, 200 simulations per effect size, seed 20260929, and no gas control.
- **P̄ (disclosed):** converting the MDE to dollars uses P̄ as defined in §4, the mean 2023 price of the **real** High units. That's one pre-period price level, computed automatically; no utility-level value was viewed.
- **The MDE** is the smallest injected effect detected 80% of the time at α = 0.05: **$U\* = $5.41 a month** (0.0430 log points, 4.4%; P̄ = 13.7¢/kWh over 27 High units; `docs/appendix_C_power.csv`, recomputed on the v0.7 Appendix A. It was $5.42 before the merger sweep).
- If $U\* is over $10, the site says plainly that small effects would be invisible to this method.

## 8. Separation of duties and the viewing freeze
- **Two modules:**
  - `pipeline/` (fetch, clean, panel) never imports `analysis/`.
  - `analysis/` (the §4 model and §5 checks) is written and tested on a **synthetic panel with fake prices** *before* v1.0, and its SHA-256 is frozen in v1.0. After the tag, the only step left is to run it on the real data.
- **Viewing freeze until the v1.0 tag:** real price data may only be built and checked by the automated validators and the state-average cross-check (THREAT-MODEL §2.2). No one may:
  - view, chart or tabulate utility-level prices for 2023 onward;
  - show price next to exposure;
  - sort or colour utilities by exposure.
- **Unrestricted:** exposure maps and the "announced vs. energized" monitor.

## 9. Locking and timestamping v1.0 (the proof we didn't peek)
Git dates are set by whoever commits, so on their own they prove nothing. The proof is an **external timestamp on the SHA-256 hashes of the frozen files.**
1. **The frozen set.** Committed in git under the annotated tag `prereg-v1`: this document, every `docs/appendix_*.csv` (A, A2, A3, B, B2, C, including the MDE), the synthetic-tested `analysis/` code and all `pipeline/` code. **Bound by SHA-256 only**, because they're gitignored and not stored in the tag: the derived panel files (primary and extended), the derived units files, the PJM zone exposure files and every raw input named in `data/derived/panel_provenance.json`. Those exact bytes are backed up before tagging (`uni/backups/whopays-prereg-v1/`, checked with `sha256sum -c`), since EIA revises its files and they can't be downloaded again. Sign the tag only if a signing key already exists; creating one is Colin's call.
2. **Write `docs/prereg-v1.sha256`** with `python -m pipeline.freeze`, holding the SHA-256 of every file in step 1.
3. **External timestamp (decided by Colin, 2026-09-28, TICKETS T2): OpenTimestamps only.** Only the SHA-256 of `docs/prereg-v1.sha256` leaves the machine. The `.ots` proof is committed once it's Bitcoin-confirmed. There's no GitHub push and no OSF registration.
4. **Run guard (replaces the CI check; THREAT-MODEL P0-11):** `analysis/run.py` refuses to run unless:
   - HEAD descends from `prereg-v1`;
   - `prereg-v1` is an annotated tag whose hash file lists this document;
   - **every frozen file** matches its hash in `prereg-v1:docs/prereg-v1.sha256`, with no uncommitted edits, and no code files missing or added. Any mismatch refuses, and a fix needs a `prereg-v1.x` amendment (step 5);
   - the panel, units, extended and MDE inputs it is given are the frozen files.
   **One real run:** on the frozen panel, output goes only to `analysis/` at 9,999 draws, and the guard blocks a second run in this checkout (a `RUNLOG.md` already committed after the tag). It can't stop someone who deletes files or switches branches. That's why the seed is fixed: a re-run gives the same numbers, and anything that could change them needs a timestamped amendment. The RUNLOG is committed immediately after the run. It is written once (never overwritten), and records the command line, the SHA-256 of the tag's hash file (the value OpenTimestamps stamped), the tag object id, and the hashes of the manifest, the panel provenance and the source files. The RUNLOG is stamped with OpenTimestamps as soon as it's committed. The real run follows the tag stamp without delay, and any amendment made in between is disclosed.
   **What the stamp can and can't prove:** it proves the plan was fixed before the run. It can't prove we'd have published any result, because nobody outside the team knows v1.0 exists until we publish (the cost of OpenTimestamps-only, T2). Our commitment is §6's rule that null results are published with the same prominence.
5. **Amendments** repeat steps 1–3 as `prereg-v1.x`, each dated and with a reason, and before the analysis it affects.

## 10. v0.5 settlements (Entra's coding questions)
1. **Top-third rounding:** floor(n/3), minimum 1, ties High (§3.3).
2. **Check 3** had no way for a null result to pass. It now uses a two-branch rule (§5).
3. **Check 4 under a null:** a sign flip is no longer a failure; the check instead fails on significance (§5).
4. **After a subsample drop:** High is recomputed and the region rule is not re-applied (§5).
5. **Pre-trend and placebo** use only data up to 2023 (§5).
6. **Rambachan–Roth:** a simplified bound, reported only (§5).
7. **The pre-trend Wald** uses CR2 covariance (§5).
8. **P̄ and continuous g:** P̄ as in §4. Continuous g is in raw log points and is reported as β and p only, with no interval.

The code's SHA-256 hashes (docs/ANALYSIS_CODE.md) are refreshed to match these rules before v1.0.

## 11. v0.6 record (Phase 3 pipeline, counts only, no prices from 2023 on viewed)
- **Panel:** 85 units × 133 months, 11,305 rows. All 14 automated validators pass.
- **Gas control:** the switch is explained in §2.
- **Disclosed:** validator P0-4 compares built state totals with EIA's own state averages. Its coverage threshold was raised from 90% to 95% after the first run failed only in the 90–95% coverage band (59 state-months in 7 states, none off by more than 6%). It is a data-quality cross-check, with no exposure involved.
- **Dropped robustness item:** the regional-CPI deflated price is removed as redundant, because region×month effects absorb a region-level deflator.
- **Re-run when available:** the "Final EIA values only" robustness row is re-run when EIA finalises the values.

## 12. v0.7 record (Zero's pre-lock review, no prices viewed)
- **Gas term** written into §4 as `gasShare × ln(HH)`. The 2019 shares come from EIA's annual state generation table, listed in Appendix B2 (§2).
- **Outcome text** (§2) states what EIA-861M can and can't separate, and that the bundled-only sample rule is the fix.
- **Vintage** (§2): the pre-v1.0 files are adopted and hashed. "First pull after v1.0" is withdrawn.
- **Mergers** (§2): full sweep of EIA's merger tables. Appendices A and B are refrozen. Zero's hypothesis is confirmed: FPL's g falls from 0.104 to 0.001 once Gulf Power is spliced in, so FPL leaves High and Duke Energy Carolinas (5416-NC) enters it. The sample stays at 85 units with 27 High. It was decided from exposure data only.
- **Extended sample** defined for the co-op/muni row (§5). **$U\* = $5.41** (§7).
- **Check 3** is disclosed as near-vacuous and kept as written (§5).
- **Robustness list** (§5): the `N3045` with US fill row is added, and the CPI row stays dropped (§11).
- **Power** (§7): the method actually used is described, and the use of the real High units' 2023 P̄ is disclosed.
- **Per-utility pages** (§6): excluded utilities don't show the group result.
- **Locking** (§9): OpenTimestamps as decided, and the run guard replaces the CI check.
- **Final re-review (`scratch/p7-zero.md`):** the freeze now covers the data as well as the code. There's one real run, the RUNLOG records the stamped hash-file digest (§9), check 3's weakness is noted in §0, and "standard residential rate" becomes "average residential price" (§6).

## 13. v1.0 (2026-09-29)
- §0's list of what we knew outside PJM is reconstructed from the written record, because Colin had no separate list. Status set to binding. The frozen data is backed up. Tagged `prereg-v1`.
