# Sequence changes ideal storage accounting at fixed peaks and variance

**RTE reported profiles on a nominal civil-label grid, not a physically complete UTC timeline.** This is a hypothetical lossless, unlimited-power storage model, not an estimate of storage required by France. Not peer reviewed.

Across ten annual nominal profiles, the median original/permutation-reference capacity ratio was **1.1074**: original order required **10.7% more model capacity** than the median of999 within-month whole-day rearrangements. This is the median of ten year-specific ratios, not a ratio of pooled capacities. All ten primary years were above their reference median; year-specific ratios ranged from 1.0269 to 1.2781. Every rearrangement preserved the residual values—and therefore their mean, variance and peaks—while changing their order.

The narrow conclusion is that these marginal summaries do not uniquely determine ideal storage energy in this model. The [original “Storage Is Sized by Variance” hypothesis](https://incoprea.com/research-library/original-theories-vol8-20261030/theories/storage-sizing-variance.html) already says duration matters. This diagnostic is compatible with that duration-aware mechanism; it does not prove the whole hypothesis, compare predictive performance of variance versus peak, or establish a policy recommendation. No scientific novelty is claimed.

## Data and the pre-outcome change in scope

RTE’s [finalized national éCO2mix dataset](https://odre.opendatasoft.com/explore/dataset/eco2mix-national-cons-def/information/) provides actual consumption, wind and solar in integer MW, with forecasts at quarter-hour labels. We downloaded all ten 2015–2024 selected-column annual exports: 26,218,088 bytes, retaining exact raw files and SHA-256 hashes. All 175,344 required actual **source(date,heure) labels** were complete and unique. No year, missing observation or unfavorable result was silently omitted.

The original locally saved [v1plan](plan-v1.json) assumed a physically contiguous UTC half-hour calendar, including46/50-slot daylight-saving days. Its [preflight failed](preflight-v1.json) **before any storage capacity outcome was computed**. The reported calendar instead supplies48 actual labels for every nominal day. Its derived UTC timestamps have spring duplicates and autumn omissions; they cannot be silently repaired or deduplicated into a validated physical timeline. Source solar also contains signed negative MW values; their cause is not inferred here.

RTE’s [official file specification](https://assets.rte-france.com/prod/public/2025-06/Eco2mix%20-%20Sp%C3%A9cifications%20des%20fichiers%20en%20puissance.pdf), §3.1, describes96 quarter-hour source labels per day and half-hour actuals. This supports describing the published format; it does not recover missing physical-time information. The v1failure is a mismatch with the study’s first assumption, **not a finding that RTE’s source format is erroneous**.

We preserved v1 and sealed a [numbered v2revision](plan-v2.json), [revision explanation](PLAN-REVISION.md) and [diff](plan-v1-to-v2.diff) before inspecting capacity outcomes. V2 explicitly studies the complete nominal source grid, with 0.5 **nominal-hour accounting weight** per actual source label. The [nominal preflight](preflight-v2.json) passed. The old physical-timeline gate remains failed; passing the revised gate does not validate physical UTC completeness.

V2 was locally saved at 2026-10-30T17:14:14.348736+00:00, before the run began at 2026-10-30T17:18:53.186873+00:00. A separate Codex agent reviewed the exact plan, code and frozen inputs before execution. This was internal computational review, not external peer review or an independently registered protocol. All plans, source inputs and code remain available.

## Model and exact accounting

The primary scenario fixes wind/solar annual nominal energy shares at 70/30, chosen before outcomes. Within each annual profile, the observed wind and solar shapes are separately scaled so the hypothetical renewable total exactly balances the supplied demand under the nominal weights. Signed reported renewable values are retained unchanged in the primary calculation.

With annual sample sumsΣL,ΣW,ΣS and declared wind share a/b, hypothetical generation is:

`G[t] = ΣL × ((a/b)W[t]/ΣW + ((b−a)/b)S[t]/ΣS)`.

The residual is R=L−G. The code uses an exact integer numerator,

`N[t] = bΣWΣS L[t] − ΣL(aΣS W[t] +(b−a)ΣW S[t])`,

with denominator D=bΣWΣS. The cycle sum of N is exactly zero. No floating-point detrending, energy correction or drift removal is used.

Let C[k] be the cumulative sum of N through slot k, including C[0]=0. Ideal energy capacity is

`E = (max C − min C)/(2D)` nominal MWh-equivalent.

This is the exact cyclic energy range for the declared lossless, unlimited-power model. Choosing initial state of charge to shift all cumulative states into a nonnegative band makes this range feasible; any smaller capacity cannot contain its maximum and minimum. It is established cumulative-storage accounting, not a new theorem. See the [independent proof note](internal-review/cyclic-storage-proof.md) and the [UCL/CREDS modeling context](https://www.creds.ac.uk/wp-content/uploads/Long-term-storage-needs.pdf).

There are no charge/discharge power limits, losses, curtailment, imports, dispatchable generation or transmission constraints. Every year is separately cyclic. “Nominal GWh-equivalent” and “equivalent mean-demand nominal hours” are scenario-accounting units. They must not be presented as validated historical French MWh or real system requirements.

## Conditional day-order reference and sensitivities

For each year and scenario,999 seeded rearrangements shuffle complete 48-slot source-date blocks within their original month. Months stay in order; within-day paired consumption/wind/solar shapes, monthly totals, residual values, variance and peaks are preserved. Multi-day ordering changes. Seasonal structure is not fully removed, and the design does not identify which particular type of temporal dependence drives a difference.

The day-order distribution is a **conditional sensitivity reference**, not a randomized treatment experiment, confidence interval, or proof that days are exchangeable. The code retains all 49,950 results, seeds, exact cumulative-range numerators and order hashes. Year-specific reference ranks and descriptive Holm-adjusted reference quantities are supplied, but they are not calibrated causal p-values. Years are not treated as independent half-hour observations.

Five scenarios were fixed in v2 before outcomes:70/30 primary;50/50 and90/10 mixtures; removing both source dates corresponding to Paris DST transitions; and separately clipping negative wind/solar to zero before normalization. The latter is explicitly a preprocessing sensitivity, not a correction of the untouched primary inputs. DST-date removal creates a reduced synthetic profile and does not repair or reconstruct the physical timeline. The earlier same-length permutation proposal was retired before outcomes because all source blocks have the same 48-slot length.

## Results across all scenarios

| Scenario | Median annual original/reference ratio | Ratio range | Years above / below reference median | Years outside central 95% reference |
| --- | ---: | --- | ---: | ---: |
| 70/30 primary | 1.1074 | 1.0269–1.2781 | 10 / 0 | 6 |
| 50/50 mixture | 1.0558 | 1.0218–1.1444 | 10 / 0 | 9 |
| 90/10 mixture | 1.1568 | 0.9840–1.4447 | 9 / 1 | 6 |
| Remove both DST-transition source dates | 1.0972 | 1.0250–1.2891 | 10 / 0 | 7 |
| Nonnegative-generation preprocessing | 1.1089 | 1.0283–1.2710 | 10 / 0 | 6 |

At 50/50, the median ratio was 1.0558; at 90/10 it was1.1568. **One 90/10 year, 2016, went in the opposite direction**, with ratio 0.9840: the original profile required 1.6% less capacity than its reference median. This result is retained. Removing DST-transition dates gave a median ratio 1.0972, and the nonnegative-generation sensitivity1.1089. These are model-specific sensitivity comparisons, not a claim that every mixture or year increases capacity.

Six primary years lay outside their own central 95% reference range. This describes the conditional rearrangements, not population-level statistical significance or real-world causal evidence. The exact mathematical point—order can change a cumulative excursion with identical marginals—does not depend on selecting an extreme year or a p-value threshold.

![Primary original capacity and all 999-order central reference ranges by year; units are nominal GWh-equivalent](figures/capacity-primary.svg)

![All fifty year-scenario results on shared capacity axes](figures/capacity-all-scenarios.svg)

![All five scenarios’ original/reference ratios, including the 90/10 reversal in 2016](figures/ratios-all-scenarios.svg)

## Exact same-marginal control

The predeclared residual sequences [1,1,−1,−1] and[1,−1,1,−1] both have zero mean, population variance 1 and positive peak 1 MW. Under half-hour model weights, their minimum cyclic energies are respectively **1 MWh and 0.5 MWh**. This is an exact toy calculation, not a measurement on France or a new storage theorem. It shows why neither variance nor peak alone can fully encode the cumulative sequence.

![Exact four-slot cumulative-excursion control](figures/deterministic-control.svg)

## All annual results

The interval below is the central 95% of999 conditional rearrangements, not a confidence interval. Capacities are nominal GWh-equivalent; full precision and exact integers are downloadable.

| Scenario | Source-label year | Original nominal GWh-equivalent | Reference median | Central95% reference | Original / median |
| --- | ---: | ---: | ---: | --- | ---: |
| 70/30 primary | 2015 | 33,901.82 | 29,713.98 | 28,014.27–32,547.56 | 1.1409 |
| 70/30 primary | 2016 | 29,616.80 | 28,842.01 | 26,576.81–32,254.36 | 1.0269 |
| 70/30 primary | 2017 | 36,972.92 | 32,357.48 | 30,300.39–35,612.86 | 1.1426 |
| 70/30 primary | 2018 | 17,242.81 | 14,515.05 | 12,536.92–17,364.12 | 1.1879 |
| 70/30 primary | 2019 | 34,846.16 | 32,219.29 | 30,894.88–34,546.10 | 1.0815 |
| 70/30 primary | 2020 | 31,063.91 | 29,473.51 | 28,352.79–31,129.41 | 1.0540 |
| 70/30 primary | 2021 | 36,908.50 | 33,888.95 | 32,204.95–36,461.29 | 1.0891 |
| 70/30 primary | 2022 | 31,156.48 | 27,973.25 | 25,870.34–31,807.38 | 1.1138 |
| 70/30 primary | 2023 | 32,093.85 | 25,110.00 | 22,956.12–28,764.24 | 1.2781 |
| 70/30 primary | 2024 | 26,093.57 | 23,698.95 | 22,283.06–25,819.62 | 1.1010 |
| 50/50 mixture | 2015 | 58,747.10 | 55,195.60 | 54,617.17–56,758.24 | 1.0643 |
| 50/50 mixture | 2016 | 47,300.88 | 43,903.08 | 42,178.38–46,208.30 | 1.0774 |
| 50/50 mixture | 2017 | 58,198.84 | 55,947.21 | 54,965.29–57,608.93 | 1.0402 |
| 50/50 mixture | 2018 | 47,974.71 | 46,953.08 | 46,133.15–48,513.76 | 1.0218 |
| 50/50 mixture | 2019 | 56,660.05 | 53,611.91 | 52,746.40–55,352.01 | 1.0569 |
| 50/50 mixture | 2020 | 48,190.64 | 46,307.29 | 45,181.68–48,089.96 | 1.0407 |
| 50/50 mixture | 2021 | 59,494.14 | 56,407.59 | 55,119.95–58,674.84 | 1.0547 |
| 50/50 mixture | 2022 | 47,739.23 | 45,426.93 | 44,130.53–47,298.60 | 1.0509 |
| 50/50 mixture | 2023 | 48,991.85 | 42,809.18 | 41,325.01–45,319.70 | 1.1444 |
| 50/50 mixture | 2024 | 47,900.52 | 44,904.80 | 43,727.35–46,615.26 | 1.0667 |
| 90/10 mixture | 2015 | 29,213.56 | 24,448.48 | 22,350.65–28,349.16 | 1.1949 |
| 90/10 mixture | 2016 | 37,627.39 | 38,239.64 | 36,833.79–41,391.16 | 0.9840 |
| 90/10 mixture | 2017 | 22,523.43 | 21,312.57 | 18,757.23–25,545.15 | 1.0568 |
| 90/10 mixture | 2018 | 36,270.13 | 31,944.41 | 29,926.88–34,758.36 | 1.1354 |
| 90/10 mixture | 2019 | 36,278.90 | 29,333.92 | 27,738.73–31,923.12 | 1.2368 |
| 90/10 mixture | 2020 | 29,660.87 | 28,451.69 | 26,929.62–31,093.63 | 1.0425 |
| 90/10 mixture | 2021 | 35,109.90 | 29,191.46 | 27,572.02–32,806.99 | 1.2027 |
| 90/10 mixture | 2022 | 33,680.72 | 30,755.30 | 28,063.11–35,783.90 | 1.0951 |
| 90/10 mixture | 2023 | 42,964.21 | 29,739.58 | 27,400.72–33,330.11 | 1.4447 |
| 90/10 mixture | 2024 | 32,787.25 | 27,827.28 | 26,315.88–31,586.79 | 1.1782 |
| Remove both DST-transition source dates | 2015 | 33,297.87 | 30,505.25 | 28,838.13–32,854.64 | 1.0915 |
| Remove both DST-transition source dates | 2016 | 29,138.75 | 28,429.10 | 26,308.47–31,584.01 | 1.0250 |
| Remove both DST-transition source dates | 2017 | 37,316.75 | 31,955.54 | 30,008.92–35,179.97 | 1.1678 |
| Remove both DST-transition source dates | 2018 | 17,055.19 | 13,898.45 | 11,755.26–16,758.97 | 1.2271 |
| Remove both DST-transition source dates | 2019 | 34,902.26 | 32,259.55 | 30,954.83–34,553.11 | 1.0819 |
| Remove both DST-transition source dates | 2020 | 30,553.52 | 28,911.79 | 27,772.91–30,453.16 | 1.0568 |
| Remove both DST-transition source dates | 2021 | 36,530.81 | 33,594.83 | 31,866.72–35,923.82 | 1.0874 |
| Remove both DST-transition source dates | 2022 | 31,170.27 | 27,852.36 | 25,883.60–31,849.16 | 1.1191 |
| Remove both DST-transition source dates | 2023 | 31,875.56 | 24,726.81 | 22,625.91–28,335.18 | 1.2891 |
| Remove both DST-transition source dates | 2024 | 25,569.56 | 23,184.91 | 21,761.00–25,761.61 | 1.1029 |
| Nonnegative-generation preprocessing | 2015 | 33,883.55 | 29,701.32 | 28,084.02–32,387.22 | 1.1408 |
| Nonnegative-generation preprocessing | 2016 | 29,604.33 | 28,790.29 | 26,741.55–31,873.91 | 1.0283 |
| Nonnegative-generation preprocessing | 2017 | 36,953.69 | 32,344.95 | 30,253.11–35,566.25 | 1.1425 |
| Nonnegative-generation preprocessing | 2018 | 17,230.37 | 14,454.94 | 12,537.21–17,273.21 | 1.1920 |
| Nonnegative-generation preprocessing | 2019 | 34,834.12 | 32,222.69 | 30,914.96–34,536.34 | 1.0810 |
| Nonnegative-generation preprocessing | 2020 | 31,058.12 | 29,397.07 | 28,344.95–31,066.91 | 1.0565 |
| Nonnegative-generation preprocessing | 2021 | 36,908.50 | 33,942.76 | 32,218.71–36,084.91 | 1.0874 |
| Nonnegative-generation preprocessing | 2022 | 31,156.48 | 27,933.10 | 25,831.62–31,968.28 | 1.1154 |
| Nonnegative-generation preprocessing | 2023 | 32,093.85 | 25,251.44 | 22,948.82–28,438.84 | 1.2710 |
| Nonnegative-generation preprocessing | 2024 | 26,093.57 | 23,669.44 | 22,259.65–26,065.05 | 1.1024 |

## Reproducibility, review and authorship

The experiment ran once after both the revised nominal-data gate and exact code approval. It used only Python 3 standard-library code, recorded at Python 3.14.0. No parameters, seeds, years or scenarios were changed after outcomes. The exact daily-prefix optimization was checked against direct slot-by-slot evaluation for every original order and the first permutation of every condition. All cycle totals and monthly/day-multiset invariants passed.

A separate Codex agent independently checked all 50 original capacities, seven preselected direct-slot permutations, every summary and the retained tables: **830,790 checks, zero issues**. This is internal computational verification, not external peer review or evidence of physical validity. Its [readable report](internal-review/storage-independent-audit.md), [JSON record](internal-review/storage-independent-audit.json), replay code and proof note are included.

The original hypothesis came from the DeepSeek-prepared collection. Codex prepared this model analysis, code, figures and report; the independent computational implementation was by a separate Codex agent. RTE supplied the reported source profiles and does not endorse this reuse.

Useful files include:

- [All results](results/results.json), [year/scenario CSV](results/year-scenario-results.csv), [all permutation CSV](results/permutation-results.csv), [JSON](results/permutation-results.json), [exact day summaries](results/day-summaries.csv) and [run metadata](results/run-metadata.json).
- [Sealed v2plan](plan-v2.json), [experiment runner](run_storage_test.py), [validated nominal-label inputs](validated-nominal-actuals.csv), [data provenance](data-provenance.json), [license/attribution](DATA-LICENSE-AND-ATTRIBUTION.md).
- All ten exact selected-column source CSVs and sanitized HTTP receipts under `raw/`. [Official dataset metadata](raw/dataset-metadata.json) and the [linked license PDF](raw/etalab-licence-ouverte-v2.pdf) are preserved.
- Figures are standalone scientific SVGs and PNGs generated from frozen results by [make_matplotlib_figures.py](make_matplotlib_figures.py), using Matplotlib 3.11.2. The experiment itself uses the Python standard library; plotting-only dependencies are listed in [plotting-requirements.txt](plotting-requirements.txt). No plot-fitting or additional research run is performed.

To replay, use a clean copy of the supplied plan, raw input folder and unchanged runner in a directory with no `results/` subdirectory. Verify hashes, run `python3 run_storage_test.py preflight --directory <copy>`, then run the same approved code with `python3 run_storage_test.py run --directory <copy> --approval internal-review/execution-approval-v2.json`. The runner refuses to overwrite results. Exact replays were checked on the recorded Python runtime; later Python shuffle implementations should not be assumed byte-identical without checking retained order hashes.

## What follows—and what does not

Sequence contains capacity-relevant information that fixed marginal peak and variance omit in this declared model. The observed nominal-profile effect is useful as an engineering diagnostic. It is not proof that variance beats peak as a predictor across real systems, not a test of optimal storage power, and not a rejection of a hypothesis that already includes duration. A physical French sizing study would require a validated elapsed-time chronology and a model of losses, power, curtailment, trade and the wider electricity system. No such claim is made here.
