# Expanded lead study: external source audit

Checked 27 September 2026. Primary-source web research only; no provider requests or publication. The machine-readable source ledger is `sources.csv`; the 45 league-season rows are `expected-counts.csv`.

## Coverage denominator

The target is regular-season league fixtures in the Premier League, LaLiga, Serie A, Bundesliga and Ligue 1, from 2017/18 through 2025/26 inclusive. The expected count of played or officially ratified fixtures is **16,111**, before timeline-quality exclusions. This is a coverage target, not the analysis sample.

| Season | PL | LaLiga | Serie A | Bundesliga | Ligue 1 | Total |
|---|---:|---:|---:|---:|---:|---:|
| 2017/18 | 380 | 380 | 380 | 306 | 380 | 1,826 |
| 2018/19 | 380 | 380 | 380 | 306 | 380 | 1,826 |
| 2019/20 | 380 | 380 | 380 | 306 | 279 | 1,725 |
| 2020/21 | 380 | 380 | 380 | 306 | 380 | 1,826 |
| 2021/22 | 380 | 380 | 380 | 306 | 380 | 1,826 |
| 2022/23 | 380 | 380 | 380 | 306 | 380 | 1,826 |
| 2023/24 | 380 | 380 | 380 | 306 | 306 | 1,752 |
| 2024/25 | 380 | 380 | 380 | 306 | 306 | 1,752 |
| 2025/26 | 380 | 380 | 380 | 306 | 306 | 1,752 |

Full double-round-robin counts are N*(N-1). The LFP directly confirms the curtailed 2019/20 season had 279 games played out of 380 originally scheduled (FL19, board minutes p9). The 101 unplayed fixtures must not be labelled missing data. The French 18-club/34-round format begins in 2023/24 (FL23). Regular counts exclude cross-division promotion/relegation play-offs (BLPO, FLPO) and the additional 2022/23 Spezia-Verona relegation tiebreak (SA23PO).

**Verification strength:** most historical rows are format-derived expected counts. They were not each independently recounted from a historical official table during this audit. The CSV explicitly preserves that distinction. Final data coverage must match fixture identities and exclusions, not just equal a total.

## 2025/26 completion and limitations

- **Premier League:** official final table has 20 clubs, all with 38 played: 380 fixtures (PL25).
- **Bundesliga:** official final table has 18 clubs, all with 34 played: 306 fixtures (BL25).
- **Serie A:** official league recap expressly reports 380 matches played (SA25). This is direct league confirmation, although the dynamic final-table endpoint did not retrieve.
- **LaLiga:** official 2025/26 round-38 page lists ten completed results on 23-24 May 2026 (PD25). The season-specific table endpoint was inaccessible. The 380 coverage target follows regular format; a full official final-table arithmetic check is not claimed.
- **Ligue 1:** the official calendar expressly identifies 306 fixtures (FL25). PSG's official final-round report supplies eight results and identifies Nantes-Toulouse as stopped (FL25END); the LFP then ratified 0-0 (FL26AB). Thus this is a settled season, but not 306 full-duration matches. A full historical official table was not retrievable in text; at most 305 fixtures can meet a full-duration timeline rule before other exclusions.

Dynamic page boilerplate can refer to the current 2026/27 season even on a historical results URL. For LaLiga, the explicit 2025/26 heading, dated results and selected round are the evidence. Do not quote current-season boilerplate as historical proof.

## Match eligibility exceptions to check in the stored data

| Fixture | Treatment | Primary source |
|---|---|---|
| Bochum-Gladbach, 18 March 2022 | Ratified 0-2 after interruption. Exclude from full-duration cohort even if final score reconciles. | BL22AB |
| Montpellier-Saint-Etienne, 16 March 2025 | Permanently stopped; LFP ratified on-field score and ruled out resumption. Exclude. | FL25AB |
| Nantes-Toulouse, 17 May 2026 | Permanently stopped; LFP ratified 0-0. Exclude. | FL26AB |
| Spezia-Verona, 11 June 2023 | Extra relegation tiebreak after 38 league matches per team. Exclude. | SA23PO |
| Bournemouth-Luton, original 16 December 2023 | Original abandoned; replay ordered in full on 13 March 2024. Include only completed replay. | PLREPLAY |
| Montpellier-Clermont, original 8 October 2023 | Original abandoned; replay scheduled 29 November. Include only replay. | FLREPLAY1, FLREPLAY2 |
| Nice-Marseille, original 22 August 2021 | Replay ordered at relocated ground. Include only completed replay. | FLREPLAY3 |
| Lyon-Marseille, original 21 November 2021 | Replay ordered in full. Include only completed replay. | FLREPLAY4 |

This is a verified exception checklist, not a claim to have exhaustively discovered every interruption across nine seasons. A suspended game eventually resumed from the original match clock differs from a void game replayed from 0-0. A resumed fixture can enter only if the reconstructed timeline joins both sessions correctly and reaches the genuine final whistle; flag it for sensitivity analysis. Database FT flags alone do not establish this.

## Literature: keep the questions distinct

**Kent and Brandes (2025), CHANCE 38(3), 35-42.** The open ETH full text (LIT1) models time to the next conceded goal after a team scores to draw level, lead by one or lead by two. Their follow-up continues until concession or full time even if that team scores again. They adjust for team strength, venue and league-season scoring environment, and discuss imprecise stoppage-time recording. A higher adjusted concession hazard does not mean the same team more often loses its entire advantage or loses the match. Our descriptive checkpoint and first-attainment outcomes cannot refute or replicate their Cox model. Retain that distinction and do not import their numerical estimates into our results. They do not establish a causal mechanism such as complacency. Their exact-2-0 analysis is separate from the broader two-goal category.

**Askalidis (2018).** The author's original analysis (LIT2) builds all attained scorelines and final W/D/L from around 9,000 matches; a match can appear more than once. It also separates exact 2-0. This is useful precedent for attained-state analysis, but does not align every comparison to the same match time. Do not copy its aggregate win rates into the expanded study.

**Wolanin (2023).** Prior package research identified an original Swiss-league halftime comparison (LIT3), so time-aligned lead analysis is not a novel concept. Direct retrieval timed out on this audit. Retain the attribution only to the extent already supported by the saved earlier audit, or recheck before discussing detailed estimates.

For our first-attainment analysis, continue following a two-goal leader that increases its advantage to three goals. Stopping follow-up at that point selectively removes successful cases. Separate (a) next concession, (b) eventual equaliser, (c) recovered win after equaliser, and (d) final W/D/L. These are different events with different denominators. Those are analysis-design recommendations, not numerical findings taken from external papers.

## Source links and findings

- **PL25 — [Premier League official 2025/26 final table](https://www.premierleague.com/en/tables/premier-league/2025-26)**: 20 rows; every club has played 38. Sum of played / 2 = 380. Full table inspected.
- **BL25 — [Bundesliga official 2025/26 final table](https://www.bundesliga.com/en/bundesliga/table/2025-2026)**: 18 rows; every club has played 34. Sum of played / 2 = 306. Full table inspected.
- **PD25 — [LaLiga official final-round results 2025/26](https://www.laliga.com/laliga-easports/resultados/2025-26/jornada-38)**: All ten round-38 matches have final scores on 23-24 May 2026. Season-specific table endpoint was inaccessible; this verifies final-round completion, not an independent 380-match recount.
- **SA25 — [Lega Serie A season recap 2025/26](https://en.legaseriea.it/serie-a/news/serie-a-enilive-2025-26-in-numbers)**: League expressly reports 380 matches played, 281 decisive results and 99 draws.
- **SAFMT — [Lega Serie A format documentation](https://img.legaseriea.it/vimages/64426a67/Linee_Guida_Diritti%20AV_2024-2029.pdf)**: 20 clubs, home-and-away round robin, 380 regular matches plus any title/relegation tiebreaks. Separate tiebreaks from regular season.
- **FL19 — [LFP board minutes 30 April 2020, p9](https://www.lfp.fr/assets/20200430_PV_Conseil_Administration_LFP_e824a457fa.pdf)**: Expressly states 279 Ligue 1 games played out of 380. Use 279 as played-fixture denominator, 380 as original planned calendar.
- **FL21 — [LFP 2021/22 calendar](https://www.lfp.fr/article/ligue-1-uber-eats-le-calendrier-de-la-saison-2021-2022)**: 38 matchdays; opening round lists ten fixtures, supporting 20-club regular format.
- **FL23 — [LFP 2023/24 calendar](https://www.lfp.fr/article/ligue-1-uber-eats-le-calendrier-de-la-saison-2023-2024)**: 34 matchdays with nine fixtures each; 18-club era begins 2023/24.
- **FL25 — [Ligue 1 official 2025/26 calendar](https://ligue1.com/fr/articles/l1_article_2812-)**: Expressly announces 306 matches and 34 matchdays.
- **FL25END — [PSG official final-round results 2025/26](https://www.psg.fr/content/resultats-de-la-34e-journee-de-ligue-1-2025-2026-paris-fc-paris-saint-germain)**: Lists eight final scores on 17 May and Nantes-Toulouse stopped. This is a club primary report, not full-table arithmetic.
- **FL26AB — [LFP discipline decision 27 May 2026](https://www.lfp.fr/article/commission-de-discipline-les-decisions-du-27-mai-2026)**: Nantes-Toulouse 17 May 2026 permanently stopped; on-field 0-0 ratified. Exclude from a full-duration timeline cohort even if provider marks FT.
- **FL25AB — [LFP discipline decision 2 April 2025](https://www.lfp.fr/article/commission-de-discipline-les-decisions-du-2-avril-2025)**: Montpellier-Saint-Etienne 16 March 2025 will not resume; on-field score ratified. Exclude from full-duration timeline cohort.
- **BL22AB — [DFB official Bochum 2021/22 fixture list](https://datencenter.dfb.de/competitions/bundesliga/seasons/2021-22/teams/vfl-bochum)**: Bochum-Gladbach 18 March 2022 marked 0:2 Wert. (ratified). Flag and exclude interrupted match from full-duration timeline cohort.
- **SA23PO — [Lega Serie A relegation tiebreak match programme](https://img.legaseriea.it/vimages/6481aeb8/2022-23_A_SPARE_UNI_1_SPEVER.pdf)**: 11 June 2023 Spezia-Hellas Verona separately labelled Spareggio Salvezza, after each club already played 38 league games. Exclude this extra fixture.
- **BLPO — [Bundesliga promotion/relegation format](https://www.bundesliga.com/en/faq/what-are-the-rules-and-regulations-of-soccer/how-is-european-soccer-structured-with-leagues-and-cup-competitions-10568)**: Two-leg cross-division playoff is separate from regular league schedule.
- **FLPO — [Ligue 1 2025/26 playoff explanation](https://ligue1.com/fr/articles/l1_article_3785-)**: Ligue 2 playoff winner meets 16th in Ligue 1 in two legs. Exclude these and preceding Ligue 2 playoff games.
- **PLREPLAY — [Premier League Bournemouth-Luton replay notice](https://www.premierleague.com/en/news/3885238)**: Original 16 December 2023 fixture abandoned; replay in full scheduled 13 March 2024. Keep only replay, not both events.
- **FLREPLAY1 — [LFP Montpellier-Clermont replay decision](https://www.lfp.fr/article/commission-de-discipline-les-decisions-du-25-octobre-2023)**: 8 October 2023 abandoned match ordered replayed in full. Keep the completed replay only.
- **FLREPLAY2 — [LFP Montpellier-Clermont replay date](https://www.lfp.fr/article/montpellier-herault-sc-clermont-foot-63-reprogramme-j8)**: Replay scheduled 29 November 2023.
- **FLREPLAY3 — [LFP Nice-Marseille replay decision](https://www.lfp.fr/article/commission-de-discipline-les-decisions-du-8-septembre)**: 22 August 2021 abandoned match ordered replayed at relocated ground. Keep completed replay only.
- **FLREPLAY4 — [LFP Lyon-Marseille replay decision](https://www.lfp.fr/article/commission-de-discipline-les-decisions-du-8-decembre-2021)**: 21 November 2021 abandoned match ordered replayed in full. Keep completed replay only.
- **LIT1 — [Kent and Brandes 2025 open full text](https://www.research-collection.ethz.ch/server/api/core/bitstreams/96eca795-1587-44fc-9d4c-33bcca94a0f1/content)**: CHANCE 38(3), 35-42; DOI 10.1080/09332480.2025.2560280. Original time-to-concession study; see literature note.
- **LIT2 — [Askalidis 2018 original analysis](https://medium.com/data-science/dont-relax-just-yet-dangerous-leads-in-soccer-5e5a28630f03)**: Attained-scoreline final W/D/L from around 9000 games; multiple observations per match; exact 2-0 examined separately; no fixed-time comparison.
- **LIT3 — [Wolanin 2023 original halftime analysis](https://swissfootballdata.com/2023/02/22/2-0-is-a-dangerous-lead-data-says-no/)**: Original earlier ledger inspected full search text; current direct retrieval timed out. Do not rely on a fresh full-text verification here.


# Official-source spot check

On 27 September 2026, we checked ten predetermined matches against league or club reports. All ten final scores, halftime scores and score states at recorded minute 30, halftime, 60 and 75 agreed with the study reconstruction. Seven complete goal timelines matched at the stored minute resolution; three recent matches preserved the correct half and sequence but omitted added-time offsets.

Selection was fixed before looking up the selected outcomes. Within each of the 43 eligible league-season groups, the match with the lowest SHA256 of `27092026|league|season|match_id` was selected. The external-check subset was fixed as the earliest and latest eligible season in each league: ten matches. The other 33 selections were not checked externally. This limited check does not validate every match or estimate a whole-dataset error rate. Source feeds are not established as independent.

| League and season | Selected match | Result | Official evidence |
|---|---|---|---|
| Bundesliga 2017/18 | Hertha–Leverkusen, 20 September 2017 | 2–1 | [Bayer Leverkusen report](https://www.bayer04.de/en-us/news/bundesliga/bayer-04-lose-out-to-early-goals) |
| Bundesliga 2025/26 | Dortmund–Wolfsburg, 21 September 2025 | 1–0 | [Bundesliga report](https://www.bundesliga.com/en/bundesliga/news/borussia-dortmund-wolfsburg-match-report-highlights-matchday-4-34122) |
| Ligue 1 2017/18 | Toulouse–Dijon, 7 April 2018 | 0–1 | [Official Ligue 1 video description](https://www.youtube.com/watch?v=sD4tPEJwmdo) |
| Ligue 1 2025/26 | Nantes–Strasbourg, 22 March 2026 | 2–3 | [Ligue 1 report](https://ligue1.com/en/articles/l1_article_4646-panichelli-the-hero-for-strasbourg-with-late-double), [Nantes account](https://www.fcnantes.com/articles/article2809.php?num=48868) |
| LaLiga 2017/18 | Betis–Barcelona, 21 January 2018 | 0–5 | [Barcelona match sheet](https://www.fcbarcelona.com/en/matches/37727/real-betis-fc-barcelona-la-liga-2017-2018) |
| LaLiga 2025/26 | Atlético–Elche, 23 August 2025 | 1–1 | [LaLiga match sheet](https://www.laliga.com/partido/temporada-2025-2026-laliga-ea-sports-atletico-de-madrid-elche-cf-2) |
| Premier League 2017/18 | Arsenal–West Brom, 25 September 2017 | 2–0 | [Premier League report](https://www.premierleague.com/news/482152) |
| Premier League 2025/26 | West Ham–Brighton, 30 December 2025 | 2–2 | [Premier League match page](https://www.premierleague.com/en/match/2562084/west-ham-united-vs-brighton-and-hove-albion?tab=recap) |
| Serie A 2017/18 | Milan–Crotone, 6 January 2018 | 1–0 | [Official Serie A video description](https://www.youtube.com/watch?v=Lva5yNf4v18), [Crotone calendar](https://www.fccrotone.it/calendar/calendario-crotone/) |
| Serie A 2025/26 | Napoli–Bologna, 11 May 2026 | 2–3 | [Bologna report](https://www.bolognafc.it/napoli-bologna-2-3-2/), [Napoli report](https://sscnapoli.it/en/match-report-napoli-bologna-2-3/) |

The two official video descriptions were checked through indexed text, not by watching the footage; halftime follows from the sole goal's half. Neither was substituted with an easier match.

Official pages can also disagree. Nantes's printable sheet labels halftime 1–0, contrary to the league report and Nantes's own account, which establish 1–1. The narrative also clarifies first-half added time. Napoli and Bologna differ by one minute on some goal labels; Atlético lists Sørloth at 9 while LaLiga lists 8. These differences do not change any of the study's four checkpoints. The original stored clocks were not silently replaced.

Separate targeted checks confirmed that the apparent repeated goals in Hoffenheim–Gladbach (14 January 2026), Paris FC–Lens (14 February 2026), and Manchester City–Burnley (27 September 2025) were genuine separate goals sharing the same coarse 45- or 90-minute label, not duplicate records: [Bundesliga](https://www.bundesliga.com/de/bundesliga/news/tsg-hoffenheim-borussia-moenchengladbach-spieltag-17-spielbericht-highlights-35573), [Lens](https://www.rclens.fr/fr/news/compte-rendu_parisfc-rclens-ligue1-mcdonalds-20260214), [Premier League](https://www.premierleague.com/en/news/4423627/haalands-double-hands-five-star-man-city-victory-against-burnley).

Six illustrative score sequences also agree with the study records. One precision difference remains: Bournemouth's winning goal against Luton on 13 March 2024 is recorded at 83 in the stored feed and described as the 84th minute in the [league recap](https://www.premierleague.com/en/news/3930809). The difference does not change a study checkpoint, goal order or outcome. Dortmund's second goal against Bremen on 20 August 2022 came at 77, so that example belongs to the one-goal group at the 75-minute checkpoint.
