Chronology at fixed peaks and variance: a reproducible storage-accounting test
Question and relation to the original proposal
“Storage Is Sized by Variance” proposes that variability and duration explain storage requirements better than a peak alone. Its mechanism and third prediction already include duration. This study checks the narrower sufficiency question: can the same residual-value distribution yield different ideal energy requirements when its day order changes? It does not rank variance against peak across different systems or test costs, physical grid adequacy, causality or every prediction.
Pre-outcome design and a disclosed revision
Version 1 required a physically contiguous UTC half-hour series, nonnegative generation, and 23/25-hour civil days at daylight-saving changes. It failed before any capacity outcomes were computed: source exports have a fixed nominal label grid and reported solar values can be negative. The original inputs were not repaired, deduplicated or silently clipped. Version 2, sealed before capacity calculations, defines a distinct nominal-profile experiment. It retains signed inputs in the primary analysis, and adds disclosed DST-date-removal and zero-clipping sensitivities. These are locally timestamped and hashed plans, not an external preregistration.
Plan v1 · Plan v2 · Revision reason · Stopped physical-time check · Nominal-grid check
Data and time convention
The RTE/ODRÉ data description identifies half-hourly actual power values in MW, with forecasts on quarter-hour labels. Only rows containing the required actual demand, wind and solar fields were used. The RTE file specification describes the fixed daily row format and half-hour actuals. The complete 2015–2024 source-label grids contain 175,344 actual rows, exactly 48 per nominal date; raw files and hashes are retained. UTC-derived values have duplicated spring and missing autumn instants. We therefore make no physically complete UTC-series claim and do not infer a physical reason for negative reported solar values.
Fixed model and exact accounting
Let L, W and S be reported demand, wind and solar profiles. With a declared wind energy fraction p, hypothetical generation is:
G[t] = sum(L) × [p W[t]/sum(W) + (1−p) S[t]/sum(S)] r[t] = L[t] − G[t] X[k] = 0.5 × sum(r[t], t < k) C = max(X) − min(X), including X[0] = 0
All model slots receive 0.5 nominal hours. Annual energy balance and cumulative ranges are calculated from exact integer numerators and denominators before conversion to displayed decimals. For a cyclic, lossless store with unlimited charging/discharging power and no spillage, shortfall, other supply or trade, shifting the cumulative trajectory into a nonnegative state of charge proves that its range is both necessary and sufficient. This is established accounting, not a new theorem. Barrett, Gallo Cassarino and Sharp (2023), §§2–3 provide primary modelling context for cumulative supply–demand accounting and the limits of ideal storage assumptions.
Deterministic control
The residual sequences [1, 1, −1, −1] and [1, −1, 1, −1] MW each have zero total, variance 1 and positive peak 1. With half-hour model slots their cumulative ranges are exactly 1 and 0.5 MWh. The same marginal distribution can therefore require different energy capacity. Energy capacity is distinct from instantaneous power capacity.
Reference reorders and planned analyses
Each complete day remains a matched demand/wind/solar block. Days are independently reordered only within their original month; months and all within-day values remain intact. This preserves every year’s residual multiset, variance, peaks, zero annual balance and monthly totals. It changes within-month between-day chronology, not all seasonal or intraday structure. There are 999 seeded reorders per year/scenario: 50 year–scenario conditions and 49,950 reorders overall. Daily prefix summaries were checked against direct slot reconstruction. This is a conditional sensitivity reference, not a randomized-treatment causal experiment or proof that days are exchangeable.
All primary year-labelled profiles
| Year | Original (nominal GWh-equivalent) | Reference median | Reference 2.5–97.5% | Original/reference |
|---|---|---|---|---|
| 2015 | 33901.82 | 29713.98 | 28014.27–32547.56 | 1.1409 |
| 2016 | 29616.80 | 28842.01 | 26576.81–32254.36 | 1.0269 |
| 2017 | 36972.92 | 32357.48 | 30300.39–35612.86 | 1.1426 |
| 2018 | 17242.81 | 14515.05 | 12536.92–17364.12 | 1.1879 |
| 2019 | 34846.16 | 32219.29 | 30894.88–34546.10 | 1.0815 |
| 2020 | 31063.91 | 29473.51 | 28352.79–31129.41 | 1.0540 |
| 2021 | 36908.50 | 33888.95 | 32204.95–36461.29 | 1.0891 |
| 2022 | 31156.48 | 27973.25 | 25870.34–31807.38 | 1.1138 |
| 2023 | 32093.85 | 25110.00 | 22956.12–28764.24 | 1.2781 |
| 2024 | 26093.57 | 23698.95 | 22283.06–25819.62 | 1.1010 |
Ratios compare original capacity to the median reference capacity for the same profile. The median of those ten ratios is 1.107419 (10.7% more than reference); this is not a claim that shuffling reduces actual storage by 10.7%. All ten primary ratios exceed one; six lie outside their central 95% reference interval. Those intervals describe the finite reorder reference, not confidence intervals for a real grid requirement. Years are not treated as independent randomized replications, and no global p-value is claimed.
All five prespecified scenarios
| Scenario | Median original/reference ratio | Range across years | Years above reference median |
|---|---|---|---|
| 70% wind / 30% solar (primary) | 1.1074 | 1.0269–1.2781 | 10/10 |
| 50% / 50% | 1.0558 | 1.0218–1.1444 | 10/10 |
| 90% / 10% | 1.1568 | 0.9840–1.4447 | 9/10 |
| 70% / 30%, DST dates removed | 1.0972 | 1.0250–1.2891 | 10/10 |
| 70% / 30%, negative generation clipped to zero | 1.1089 | 1.0283–1.2710 | 10/10 |
The 90/10 sensitivity has one year below its reference median. The DST-date-removal scenario is a shortened nominal profile, not a repaired physical annual timeline. The clipping sensitivity changes inputs before normalization and is separate from the unchanged signed-input primary model. Complete per-year results and descriptive ranks remain in the downloads; no selected-year significance narrative is used.
Interpretation and limits
The accounting proof and computed differences show why sequence must be retained when applying this model to these profiles. They do not establish a universal empirical variance law, the original hypothesis’s causal ordering, actual French generation or energy totals, or a practical storage target. The hypothetical renewables scaling, fixed nominal clock, separately cyclic years, zero losses, unlimited power and omitted imports, dispatchable supply, transmission, curtailment, economics and interannual storage all constrain interpretation. Day reordering also changes which days are adjacent; it does not isolate a single real physical cause of persistence.
Reproduction and review
The saved plans, exact inputs, runner, seeds, per-reorder results and internal numerical audit are included. A separate Codex agent independently checked exact original capacities and selected full-slot replays and recomputed retained-result summaries. This is internal computational review, not independent external or peer review. See the audit record for its exact scope and any limitations.
Markdown report · Complete file manifest
Data, code, plans, outputs and review files
- DATA-LICENSE-AND-ATTRIBUTION.md
- DELIVERY-INVENTORY.json
- PLAN-COMMIT-v1.json
- PLAN-COMMIT-v2.json
- PLAN-REVISION.md
- PUBLICATION-NOTES.md
- acquire_data.py
- acquisition-urls.json
- data-acquisition.json
- data-provenance.json
- figure-rendering.json
- internal-review/audit_results.py
- internal-review/audit_tables.py
- internal-review/cyclic-storage-proof.md
- internal-review/execution-approval-v2.json
- internal-review/independent-calendar-diagnostic.json
- internal-review/independent-data-preflight-v2.json
- internal-review/independent-numerical-audit-v2.json
- internal-review/independent-table-audit-v2.json
- internal-review/pre-execution-design-review-v2.json
- internal-review/pre-execution-preflight-findings.md
- internal-review/prespecified-replay-checks-v2.json
- internal-review/reader-facing-review-v2.json
- internal-review/replay_math.py
- internal-review/storage-independent-audit.json
- internal-review/storage-independent-audit.md
- license-acquisition.json
- license-text.txt
- make_figures.py
- make_matplotlib_figures.py
- metadata-acquisition.json
- plan-v1-to-v2.diff
- plan-v1.json
- plan-v2.json
- plotting-installation.json
- plotting-requirements.txt
- preflight-v1.json
- preflight-v2.json
- preflight.py
- raw/dataset-metadata.json
- raw/eco2mix-2015-receipt.json
- raw/eco2mix-2015-selected.csv
- raw/eco2mix-2016-receipt.json
- raw/eco2mix-2016-selected.csv
- raw/eco2mix-2017-receipt.json
- raw/eco2mix-2017-selected.csv
- raw/eco2mix-2018-receipt.json
- raw/eco2mix-2018-selected.csv
- raw/eco2mix-2019-receipt.json
- raw/eco2mix-2019-selected.csv
- raw/eco2mix-2020-receipt.json
- raw/eco2mix-2020-selected.csv
- raw/eco2mix-2021-receipt.json
- raw/eco2mix-2021-selected.csv
- raw/eco2mix-2022-receipt.json
- raw/eco2mix-2022-selected.csv
- raw/eco2mix-2023-receipt.json
- raw/eco2mix-2023-selected.csv
- raw/eco2mix-2024-receipt.json
- raw/eco2mix-2024-selected.csv
- raw/etalab-licence-ouverte-v2.pdf
- report.md
- results/EXECUTION-LOCK.json
- results/across-year-summaries.csv
- results/across-year-summaries.json
- results/day-summaries.csv
- results/deterministic-control.json
- results/original-daily-cumulative.csv
- results/permutation-results.csv
- results/permutation-results.json
- results/results.json
- results/run-metadata.json
- results/year-scenario-results.csv
- results/year-scenario-results.json
- run_storage_test.py
- signed-input-diagnostics-before-outcomes.json
- source-hypothesis.html.txt
- validated-nominal-actuals.csv