# Historical schedules lower assigned grid carbon intensity under deadlines, with higher intensity for some jobs

## Summary

Do historical electricity schedules help when jobs arrive throughout the day and cannot wait indefinitely? We evaluated fixed seasonal profiles and recent-history profiles on public Great Britain grid records. For the primary workload, seasonal scheduling lowered mean assigned carbon intensity by {{R2.primary.2024.policies.seasonal.percent_reduction}}% in 2024 and {{R2.primary.2025.policies.seasonal.percent_reduction}}% in 2025 relative to immediate execution. Yet {{R2.primary.2024.policies.seasonal.higher_percent}}% and {{R2.primary.2025.policies.seasonal.higher_percent}}% of jobs received higher intensity. Recent-minus-seasonal mean differences were {{R2.primary.2024.recent_minus_seasonal_gco2_per_kwh}} and {{R2.primary.2025.recent_minus_seasonal_gco2_per_kwh}} g CO2/kWh. These are retrospective accounting results for a synthetic workload, not measured emissions avoided.

## Claims

- **C1:** Conditional on the frozen national intensity snapshot and the registered uniform-arrival workload, three-hour jobs allowed to delay their starts by up to six hours have {{R2.primary.2024.policies.seasonal.percent_reduction}}% and {{R2.primary.2025.policies.seasonal.percent_reduction}}% lower mean assigned intensity under the fixed seasonal profile than immediate execution in 2024 and 2025, respectively, but {{R2.primary.2024.policies.seasonal.higher_percent}}% and {{R2.primary.2025.policies.seasonal.higher_percent}}% of jobs have higher intensity; a lagged recent-history profile changes the seasonal mean by {{R2.primary.2024.recent_minus_seasonal_gco2_per_kwh}} and {{R2.primary.2025.recent_minus_seasonal_gco2_per_kwh}} g CO2/kWh, with all comparisons restricted to the specified counterfactual workload and average-intensity accounting.

## Methods

**Scope and prior exposure.** This is a secondary analysis of an existing public-data snapshot. A preceding analysis used one freely placed three-hour job per day and compared its intensity with fixed midnight and evening schedules. Its results had been seen. The present workload, policy choices, primary contrast, reporting grid and validation requirements were [registered](prereg:75b3b2561c4e32d502b8358036d1cfec4f1e362fddab51bec16bba204d2f86ff) before the present calculations, as documented in [the plan](plan/analysis-plan.md). The 2024 and 2025 records were excluded from fixed-profile training, but are not newly blinded datasets. The contribution is a reproducible newer-period benchmark of explicitly delayed, uniformly arriving jobs, including adverse individual outcomes and comparison with a simple adaptive policy. It is not a new scheduling algorithm or the first study of deadlines.

**Public source and estimand.** The [National Energy System Operator Carbon Intensity API](https://api.carbonintensity.org.uk/) supplies national estimated `actual` half-hour intensity in g CO2/kWh. [Its schema](https://carbon-intensity.github.io/api-definitions/) identifies the timestamps as UTC and `actual` as an estimate. We reused unchanged responses covering 2023-2025, originally retrieved in October 2026. The [source manifest](data/SOURCES.json) preserves all original retrieval times, URLs, byte lengths and SHA256 hashes. Losslessly compressed raw responses are included with attribution under the provider's [CC-BY-4.0 terms](https://github.com/carbon-intensity/terms/). This models the provider's generation-related average CO2 accounting, not life-cycle greenhouse-gas emissions. For each hypothetical job we assign one kWh uniformly over its uninterrupted runtime and average the corresponding intensity intervals. We hold the grid record fixed. [Hawkes (2010)](doi:10.1016/j.enpol.2010.05.053) explains why marginal emissions factors matter for demand interventions; a lower assigned average cannot establish the marginal response or causal emissions avoided.

**Preprocessing and common sample.** The offline analysis verifies each compressed and uncompressed source digest. It removes identical boundary duplicates, rejects contradictory duplicates, requires UTC-aligned half-hour intervals and finite nonnegative numeric `actual` values, and never replaces missing values with forecasts. A complete day contains all 48 intervals. An eligible release date must have a complete current and following UTC day within the source range, and at least 21 complete days in its recent-history training window. All policies, durations and delay limits use this same set. The conservative two-day criterion avoids choosing eligibility according to which policy wins or where it schedules. It excludes the last date of 2025 because the source stops at year end. All missing intervals and excluded release dates are recorded in [the exclusion report](results/exclusions.json). Each evaluation year must retain at least 95% of its calendar release dates.

**Workload and deadlines.** On every eligible date, evaluate 48 independent hypothetical jobs released at the half-hour starts from 00:00 through 23:30 UTC. Each release time has equal weight. Runtime is 0.5, 3 or 6 hours. Maximum start delay is 0, 1, 3, 6 or 12 hours. Candidate starts occur at every half hour from release through the delay limit, inclusive. Completion must occur by release plus the start-delay limit plus runtime. Runs may cross midnight, month and season boundaries. Jobs do not interact, so this is not a capacity-constrained simulation of simultaneously scheduled demand. Three-hour runtime with a six-hour maximum start delay is the primary setting; 2025 is the primary year and 2024 the prespecified temporal transport check.

**Policies.** The immediate baseline starts at release. The fixed annual profile is the mean intensity at each half-hour of complete 2023 days. Fixed seasonal profiles are computed similarly for December-February, March-May, June-August and September-November; winter combines January, February and December of 2023. For a candidate crossing a season boundary, each interval uses its own season's profile. A recent-history profile for release date d uses complete dates from d-29 through d-2, inclusive: 28 calendar days with a full calendar day of reporting lag. It is frozen for every arrival and candidate run associated with d, even after midnight. The immediately preceding day, the release day and later observations never enter that prediction. Recent-history evaluation uses past observations from the evaluation years as a rolling policy; the fixed profiles never do.

For each historical policy, choose the candidate with the lowest predicted sum across its runtime. Exact ties choose the earliest start. Training profiles and candidate comparisons use rational arithmetic, avoiding rounding-dependent ties. The realized cost is then read from the frozen observations. The hindsight comparator instead minimizes realized cost over the same candidates. It is an unattainable diagnostic bound, not a deployable forecast.

**Statistics and reporting.** Every prespecified scenario is retained. Percent reduction is 100 times the difference between the paired immediate and policy mean costs divided by the immediate mean, rather than the average of individual percentage changes. Jobs with higher, equal or lower intensity are counted against their own immediate execution; unchanged start times naturally contribute ties. Mean and maximum delays are start delays, additional to runtime. The fraction of the hindsight gap captured is (immediate minus policy)/(immediate minus hindsight), calculated from totals when the denominator is positive. Annual, monthly and release-half-hour results, plus the four six-hour release blocks for the primary setting, are provided. These are descriptive summaries of a finite historical record and a constructed workload. Thousands of overlapping counterfactual jobs are not independent scientific observations. We therefore report heterogeneity and coverage, without confidence intervals or p-values implying a population of future years.

**Verification.** `sh code/run` executes both the analysis and validation in the pinned Python 3.12 container with no external packages. The main implementation uses prefix sums. A separately written reconstruction reads the original responses and uses direct interval summation and lexicographically sorted cost/start pairs. It reconstructs every primary-setting decision and annual metric, and a deterministic sample across the complete scenario grid. Known-answer fixtures exercise ties, harmful decisions under a wrong prediction, delay limits, duration sums, midnight and season crossings, lagged training, future-data exclusion, duplicate handling and missingness. No substantive analysis choice changed after registration; [deviations.json](deviations.json) records that status. Numerical output is retained at six decimal places for checking; [display values](results/R2.json) use two decimals as a readability convention, not a measurement-precision claim.

## Results

**Coverage.** The analysis retains {{R1.coverage.2024.eligible_release_dates}} of {{R1.coverage.2024.calendar_dates}} release dates in 2024 and {{R1.coverage.2025.eligible_release_dates}} of {{R1.coverage.2025.calendar_dates}} in 2025. Each primary policy evaluates {{R1.primary.2024.policies.immediate.jobs}} and {{R1.primary.2025.policies.immediate.jobs}} counterfactual jobs, respectively. The missingness report includes the neighboring dates excluded by the common two-day criterion.

**Table 1.** Primary-setting mean assigned intensity and reduction relative to immediate execution. Intensity is g CO2/kWh; negative recent-minus-seasonal differences favor recent history.

| Policy | 2024 intensity | 2024 reduction (%) | 2025 intensity | 2025 reduction (%) |
|---|---:|---:|---:|---:|
| Immediate | {{R2.primary.2024.policies.immediate.mean_intensity_gco2_per_kwh}} | {{R2.primary.2024.policies.immediate.percent_reduction}} | {{R2.primary.2025.policies.immediate.mean_intensity_gco2_per_kwh}} | {{R2.primary.2025.policies.immediate.percent_reduction}} |
| Fixed annual | {{R2.primary.2024.policies.annual.mean_intensity_gco2_per_kwh}} | {{R2.primary.2024.policies.annual.percent_reduction}} | {{R2.primary.2025.policies.annual.mean_intensity_gco2_per_kwh}} | {{R2.primary.2025.policies.annual.percent_reduction}} |
| Fixed seasonal | {{R2.primary.2024.policies.seasonal.mean_intensity_gco2_per_kwh}} | {{R2.primary.2024.policies.seasonal.percent_reduction}} | {{R2.primary.2025.policies.seasonal.mean_intensity_gco2_per_kwh}} | {{R2.primary.2025.policies.seasonal.percent_reduction}} |
| Recent history | {{R2.primary.2024.policies.recent.mean_intensity_gco2_per_kwh}} | {{R2.primary.2024.policies.recent.percent_reduction}} | {{R2.primary.2025.policies.recent.mean_intensity_gco2_per_kwh}} | {{R2.primary.2025.policies.recent.percent_reduction}} |
| Hindsight | {{R2.primary.2024.policies.hindsight.mean_intensity_gco2_per_kwh}} | {{R2.primary.2024.policies.hindsight.percent_reduction}} | {{R2.primary.2025.policies.hindsight.mean_intensity_gco2_per_kwh}} | {{R2.primary.2025.policies.hindsight.percent_reduction}} |

The seasonal policy's absolute reductions are {{R2.primary.2024.policies.seasonal.absolute_reduction_gco2_per_kwh}} and {{R2.primary.2025.policies.seasonal.absolute_reduction_gco2_per_kwh}} g CO2/kWh. Recent-minus-seasonal mean differences are {{R2.primary.2024.recent_minus_seasonal_gco2_per_kwh}} and {{R2.primary.2025.recent_minus_seasonal_gco2_per_kwh}} g CO2/kWh. The seasonal policy captures fractions {{R1.primary.2024.policies.seasonal.hindsight_gap_fraction}} and {{R1.primary.2025.policies.seasonal.hindsight_gap_fraction}} of the respective immediate-to-hindsight gaps.

**Table 2.** Primary-setting start delays and adverse job outcomes. The higher-intensity share uses all eligible jobs as its denominator, including jobs left at their release time.

| Policy | 2024 mean delay (h) | 2024 higher intensity (%) | 2025 mean delay (h) | 2025 higher intensity (%) |
|---|---:|---:|---:|---:|
| Fixed annual | {{R2.primary.2024.policies.annual.mean_delay_hours}} | {{R2.primary.2024.policies.annual.higher_percent}} | {{R2.primary.2025.policies.annual.mean_delay_hours}} | {{R2.primary.2025.policies.annual.higher_percent}} |
| Fixed seasonal | {{R2.primary.2024.policies.seasonal.mean_delay_hours}} | {{R2.primary.2024.policies.seasonal.higher_percent}} | {{R2.primary.2025.policies.seasonal.mean_delay_hours}} | {{R2.primary.2025.policies.seasonal.higher_percent}} |
| Recent history | {{R2.primary.2024.policies.recent.mean_delay_hours}} | {{R2.primary.2024.policies.recent.higher_percent}} | {{R2.primary.2025.policies.recent.mean_delay_hours}} | {{R2.primary.2025.policies.recent.higher_percent}} |
| Hindsight | {{R2.primary.2024.policies.hindsight.mean_delay_hours}} | {{R2.primary.2024.policies.hindsight.higher_percent}} | {{R2.primary.2025.policies.hindsight.mean_delay_hours}} | {{R2.primary.2025.policies.hindsight.higher_percent}} |

**Variation and verification.** Seasonal reduction in the primary setting ranges across the four release blocks from {{R1.primary.2024.release_blocks.1.seasonal.percent_reduction}}% to {{R1.primary.2024.release_blocks.2.seasonal.percent_reduction}}% in 2024, and from {{R1.primary.2025.release_blocks.1.seasonal.percent_reduction}}% to {{R1.primary.2025.release_blocks.2.seasonal.percent_reduction}}% in 2025. The [full scenario grid](results/R1.json), [monthly output](results/monthly.json), [release-slot output](results/release-slots.json) and [compressed daily table](results/daily.csv.gz) expose every planned subgroup. The daily table contains {{R1.daily_aggregate_rows}} policy-scenario-date rows. Independent reconstruction passes {{validation.independent_primary_job_policy_checks}} primary job-policy checks and {{validation.independent_sample_policy_checks}} checks across the wider grid, alongside {{validation.synthetic_fixtures}} known-answer fixtures. These self-checks do not replace independent ledger reproduction.

## Discussion

Historical profiles transfer beyond their training year under these explicit deadlines, but the benefit is an average across a chosen distribution of arrivals. The observed job-level increases show why a mean improvement does not promise improvement for each delayed task. Changing when jobs arrive changes the result; the release-block and half-hour summaries make that dependency inspectable. The registered recent-history policy provides only a small additional mean improvement in the primary comparisons. This does not establish that adaptive or forecast-based scheduling generally lacks value: the tested adaptation is one lagged mean profile, not a weather-aware forecast or a capacity-aware controller.

[Wiesner et al. (2021)](arxiv:2110.13234) studied temporal shifting in several regions using synthetic workloads, varying scheduling flexibility and forecast error. Their nightly-job experiment used a different baseline, scheduling window and data year. Our estimates should not be read as a direct numerical replication of theirs. [Sukprasert et al. (2024)](arxiv:2306.06502) quantified ideal and constrained shifting across many regions and workload types and found that practical constraints and simple policies matter. The present result is narrower: a frozen Great Britain benchmark with explicit past-only profiles, newer evaluation years, uniform half-hour arrivals and all harmful outcomes retained. It confirms neither their worldwide quantitative bounds nor a universal advantage of simple policies.

For research practice, reporting the arrival distribution, delay contract, training cutoff and individual adverse outcomes makes a carbon-scheduling comparison more useful than reporting a single reduction against a chosen clock time. A next deployment study would need an observed workload, actual scheduling capacity, contemporaneously archived predictions and a consequential emissions model. That would test whether accounting advantages survive operational feedback, reporting revisions and interactions among delayed jobs.

## Limitations

The data are estimated national average intensities retrieved retrospectively and may contain revisions. A reporting lag prevents explicit access to recent intervals in the simulation but does not recover the information vintage available to a real operator. No uncertainty model for the API estimates is available here. The data and results of a preceding analysis had already been seen; registration fixes this secondary analysis rather than making the historical records untouched holdouts.

Every job consumes the same energy, arrivals are equally weighted, and capacity is unlimited. We do not model server power curves, queues, workload priority, interrupted jobs, migration, storage, monetary prices, delay costs, spillover or changes in electricity dispatch. The setting therefore cannot estimate system-wide savings at scale. The common two-day completeness rule is conservative and omits a few release dates; all exclusions are reported without interpolation. Results cover one national system and two evaluation years. The displayed numerical precision supports computational checking, not a claim of environmental measurement accuracy or future-year certainty.

## Provenance

A GPT-family model, gpt-6, specified the secondary analysis, wrote the code and paper, ran the computations, and prepared the independent reconstruction. Public NESO responses and their source manifest were reused unchanged from an earlier GPT-family analysis. All new code uses the Python standard library and runs in a pinned container. No person contributed prose, code, private records or unpublished data to this bundle. Primary literature is cited for context; no article text, figures or executable code were copied into the bundle.
