Cycling race predictor · Vuelta a España 2026

Stage 21 — 2026-09-13

The same production stack priced under 4 course readings, against the bookmaker's pre-stage line. Each scenario is one opinion about what kind of day this is; the results section settles the argument.

4 scenarios 142 riders priced models retrained d911de60f7 book snapshot markets_1805.json

The fork

4 readings of the same road

Course profile is an input the model can't see from a map — it's set from reference races (or overridden by hand). Different readings redistribute the same probability mass across rider types.

Cobbled selection

The wall selects — a hard fast group of puncheurs contests it
sprint0.22
mountain0.08
hilly0.21
rolling0.20
break0.29
TT0.00
keyed: split sprint 0.4 / bunch sprint 0.3 / fast-finisher power day 0.2 (board order by rider-type retrieval; prices unchanged)
The operator's read, and the market's. Four times up a partially cobbled 6.6% ramp on the last day sheds pure speed, and the men left are the ones who can punch: van Aert, Nys, Cort, Laurance, Romele. References are circuit and late-short-climb finales whose front was hilly-heavy and whose winner was a classics rider rather than a sprinter — the Tour's Montmartre finale of 2025 (van Aert), Itzulia 2024 (Lapeira), Giro 2023 stage 2 (Matthews), Tour of Norway 2021 (Hayter) and Tour of Norway 2025 (Van Gils). Montmartre is the closest structural analogue anywhere in the corpus: a grand tour closing stage turned into a circuit with a repeated short climb, won by exactly the rider type this read expects.
Top 5 (blend): Brennan Matthew 28.4%; van Aert Wout 12.5%; Meeus Jordi 11.6%; De Schuyteneer Steffen 3.4%; Laurance Axel 2.9%

Regroup gallop

It comes back — 7.8 km of city road is enough and the fastest survivor wins
sprint0.12
mountain0.03
hilly0.82
rolling0.02
break0.01
TT0.00
keyed: split sprint 0.4 / bunch sprint 0.3 / fast-finisher power day 0.2 (board order by rider-type retrieval; prices unchanged)
The ledger branch. A 2.1 km climb is short, the run-in from its crest is 7.8 km of descending and flat urban road, and a bunch that wants a sprint has time to reassemble — which is what this race has done on six of seven sprint-flavoured days. References all score 0.79 to 0.84 on race_hilly_score, which in model space is the signature of a classics-flavoured day ending in a REDUCED bunch sprint rather than a puncheur finish: Tour of Turkiye 2026 stage 8, Tour Down Under 2026 stage 4, Guangxi 2025 stage 6, Catalunya 2026 stage 1 and Luxembourg 2025 stage 1. Note that this is also the branch the oracle records if the organiser neutralises time on the circuit, as the Tour did in both of the last two years, because every finisher then shares the winner's time.
Top 5 (blend): Brennan Matthew 41.5%; Meeus Jordi 20.8%; van Aert Wout 9.7%; De Schuyteneer Steffen 4.2%; Laurance Axel 2.2%

Late move

Over the top and gone — a small move holds the last 7.8 km
sprint0.00
mountain0.25
hilly0.00
rolling0.74
break0.00
TT0.00
keyed: split sprint 0.4 / bunch sprint 0.3 / fast-finisher power day 0.2 (board order by rider-type retrieval; prices unchanged)
The Cordoba replay. On stage 15 Visma used a climb 36 km out to launch van Aert and the five-man move beat the peloton by 58 seconds; today the same team has the same optionality with a steeper, cobbled launchpad inside the final eight kilometres. References are days where two to six riders went clear late and held a short flat run-in against a chasing bunch: Wallonie 2026 stage 4 (De Lie), Wallonie 2025 stage 4 (Vacek), Deutschland Tour 2024 stage 2 (Pedersen), Tour of Denmark 2024 stage 2 (Cort) and Dunkerque 2026 stage 2 (Papon). If this is the day, the oracle most likely grades it res_4 rather than anything in the keyed family — the escape-family risk named in the key note.
Top 5 if the break wins (top 10 on GC and the sprinters removed): van Aert Wout 9.8%; Debruyne Ramses 5.8%; Johannessen Tobias Halland 5.4%; Bisiaux Léo 5.3%; Buitrago Santiago 5.1%

Hindsight (post-hoc)

Hindsight (post-hoc) — the day as raced: the circuit split the race, then forty sprinted
sprint0.01
mountain0.10
hilly0.31
rolling0.14
break0.44
TT0.00
keyed: split sprint 0.4 / bunch sprint 0.3 / fast-finisher power day 0.2 (board order by rider-type retrieval; prices unchanged)
Post-race reconstruction, NOT a prediction — run with --no-log and never written to prediction_log. The circuit did split the race: forty riders finished on Tobias Halland Johannessen's time, the next group of seventy-eight came in at 1:49 and fourteen more at 3:59. But forty is a gallop, so the oracle graded the day bunch. The front was not a sprinters' front — realised top-15 shares were sprint .20, rolling .267, mountain .267 and time trial .133, with a front-five general-classification median of 77th. References are reduced gallops of 25 to 46 riders whose top fifteen held almost no pure sprinters: Tour 2025 stage 2 (van der Poel), Tour of the Alps 2026 stage 3 (Pidcock), Vuelta 2024 stage 7 (van Aert), Catalunya 2026 stage 7 (Gilmore) and Catalunya 2025 stage 5 (Brennan). This board answers only what the model would have said given the day's actual shape.
Top 5 (blend): Brennan Matthew 26.8%; van Aert Wout 15.0%; Meeus Jordi 6.3%; Debruyne Ramses 4.2%; Miquel Delgado Pau 3.0%

The board

Win probabilities, scenario by scenario

Blend win probability per scenario (cascade × LambdaRank, DNF-adjusted at the pricing layer), next to the devigged Kambi (Unibet) win line captured the morning before the stage. "Max edge" compares the most favourable scenario against the book — treat it as scenario-conditional, not a free bet.

Read "Max edge" as directional, not as a price. The blend is a set of per-rider marginals and does not sum to one book — across this field each reading totals Cobbled selection 100%, Regroup gallop 103%, Hindsight (post-hoc) 109% — while the devigged book column sums to exactly 100%. Putting the two side by side flatters the model, and Max edge is inflated by about that factor: divide a rider's probability by his reading's total before calling anything an edge. Of our heads only the LambdaRank one is natively book-preserving.

RiderTeamCobbled selectionRegroup gallopLate moveHindsight (post-hoc)Book oddsBook devigMax edge
Brennan MatthewTeam Visma | Lease a Bike28.4%41.5%–26.8%5.5011.9%+29.6pp
Meeus JordiRed Bull-BORA-hansgrohe11.6%20.8%–6.3%101.000.6%+20.1pp
van Aert WoutTeam Visma | Lease a Bike12.5%9.7%9.8%15.0%1.7537.4%-22.4pp
De Schuyteneer SteffenLotto-Intermarché3.4%4.2%–2.8%401.000.2%+4.0pp
Debruyne RamsesAlpecin-Premier Tech2.2%1.6%5.8%4.2%67.001.0%+3.2pp
Miquel Delgado PauBahrain Victorious2.5%2.0%2.0%3.0%34.001.9%+1.1pp
Laurance AxelNetcompany INEOS2.9%2.2%2.7%2.9%26.002.5%+0.4pp
Onley OscarNetcompany INEOS1.5%0.4%–2.5%101.000.6%+1.9pp
Cort MagnusUno-X Mobility2.0%1.5%–2.0%21.003.1%-1.1pp
Coquard BryanCofidis1.5%2.0%–2.0%34.001.9%+0.1pp
Roglic PrimozRed Bull-BORA-hansgrohe1.1%0.2%–2.0%201.000.3%+1.7pp
Nys ThibauLidl-Trek1.3%0.8%1.5%1.8%19.003.4%-1.6pp
Johannessen Tobias HallandUno-X Mobility1.6%0.2%5.4%1.8%81.000.8%+1.0pp
Brenner MarcoTudor Pro Cycling Team0.5%0.2%4.0%1.6%126.000.5%+1.1pp
Romele AlessandroXDS Astana Team1.3%1.1%1.0%1.5%21.003.1%-1.6pp
Carapaz RichardEF Education-EasyPost1.0%0.2%–1.4%26.002.5%-1.1pp
Braet VitoLotto-Intermarché1.4%1.3%–1.0%81.000.8%+0.6pp
Bisiaux LéoDecathlon CMA CGM Team0.5%0.2%5.3%1.3%151.000.4%+0.9pp
Hofstetter HugoNSN Cycling Team1.2%1.3%–1.1%126.000.5%+0.8pp
Berthet ClémentGroupama-FDJ United0.5%0.2%–1.1%n/a––
Skjelmose MattiasLidl-Trek1.0%0.3%3.4%1.1%251.000.3%+0.9pp
Canal CarlosMovistar Team0.8%0.7%1.8%1.1%251.000.3%+0.8pp
Tronchon BastienGroupama-FDJ United0.8%0.7%1.2%1.1%51.001.3%-0.2pp
Dainese AlbertoSoudal Quick-Step1.0%1.0%–0.5%401.000.2%+0.9pp
Late move is shown conditional on the break winning — the top 10 riders on actual GC and every pure sprinter are removed and the remaining probabilities renormalize within the break pool. That column isn't comparable with the book line or the other readings, so it's left out of Max edge; a "–" means a GC captain or a pure sprinter we assume won't be up the road.
The wall selects — a hard fast group of puncheurs contests it — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Brennan Matthew28.4%36.0%26.6%56.7%72.2%5.50
2van Aert Wout12.5%9.2%13.3%28.9%60.1%1.75
3Meeus Jordi11.6%10.2%12.0%30.3%50.0%101.00
4De Schuyteneer Steffen3.4%2.4%3.7%7.5%33.0%401.00
5Laurance Axel2.9%3.9%2.6%12.2%45.9%26.00
6Miquel Delgado Pau2.5%1.9%2.7%7.6%43.9%34.00
7Debruyne Ramses2.2%2.1%2.2%7.1%46.7%67.00
8Cort Magnus2.0%3.0%1.7%17.6%40.6%21.00
9Johannessen Tobias Halland1.6%0.8%1.8%3.3%15.6%81.00
10Coquard Bryan1.5%2.3%1.3%7.1%34.8%34.00
11Onley Oscar1.5%0.5%1.7%2.6%27.6%101.00
12Braet Vito1.4%1.3%1.4%8.5%32.4%81.00
13Romele Alessandro1.3%2.3%1.1%11.5%35.8%21.00
14Nys Thibau1.3%2.7%0.9%9.6%29.6%19.00
15Hofstetter Hugo1.2%1.9%1.1%9.3%40.9%126.00
16Roglic Primoz1.1%0.8%1.2%2.6%24.0%201.00
17Camprubí Marcel1.0%1.5%0.9%6.3%34.2%67.00
18Carapaz Richard1.0%0.2%1.2%1.9%24.8%26.00
19Skjelmose Mattias1.0%1.0%1.0%3.3%18.2%251.00
20Dainese Alberto1.0%1.4%0.8%6.7%25.6%401.00
21Canal Carlos0.8%0.3%0.9%2.5%14.8%251.00
22Aular Orluis0.8%0.3%0.9%2.7%24.2%101.00
23Tronchon Bastien0.8%1.7%0.5%7.9%33.3%51.00
24Mas Enric0.7%0.3%0.8%1.8%24.0%501.00
25Vermaerke Kevin0.6%0.1%0.7%0.8%10.3%41.00
26Omrzel Jakob0.6%0.3%0.7%1.7%17.5%n/a
27Mulubrhan Henok0.5%0.2%0.6%1.0%10.3%51.00
28Buitrago Santiago0.5%0.7%0.5%2.8%9.3%201.00
29Bisiaux Léo0.5%1.0%0.4%2.9%15.5%151.00
30Brenner Marco0.5%0.3%0.6%2.4%14.0%126.00
It comes back — 7.8 km of city road is enough and the fastest survivor wins — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Brennan Matthew41.5%41.5%40.4%66.2%84.1%5.50
2Meeus Jordi20.8%16.0%21.4%42.3%65.2%101.00
3van Aert Wout9.7%7.7%10.0%28.9%63.0%1.75
4De Schuyteneer Steffen4.2%3.0%4.3%10.1%55.6%401.00
5Laurance Axel2.2%2.9%2.0%11.4%55.3%26.00
6Miquel Delgado Pau2.0%1.8%2.0%7.0%54.1%34.00
7Coquard Bryan2.0%2.8%1.7%8.6%66.2%34.00
8Debruyne Ramses1.6%1.5%1.6%5.6%49.4%67.00
9Cort Magnus1.5%3.1%1.0%17.9%52.0%21.00
10Hofstetter Hugo1.3%1.7%1.1%8.7%66.0%126.00
11Braet Vito1.3%1.1%1.3%8.5%45.4%81.00
12Romele Alessandro1.1%2.8%0.6%13.0%54.4%21.00
13Dainese Alberto1.0%1.2%1.0%6.3%36.5%401.00
14Aular Orluis0.9%0.5%1.0%3.6%46.5%101.00
15Nys Thibau0.8%2.5%0.3%8.3%44.2%19.00
16Albanese Vincenzo0.8%1.3%0.6%9.3%64.0%41.00
17Tronchon Bastien0.7%1.6%0.5%8.0%51.1%51.00
18Canal Carlos0.7%0.4%0.7%3.2%21.5%251.00
19Fisher-Black Finn0.5%0.6%0.5%6.0%23.2%81.00
20Camprubí Marcel0.4%0.2%0.5%5.1%30.2%67.00
21Cobo Ivan0.4%0.3%0.4%5.8%22.5%201.00
22Mulubrhan Henok0.4%0.2%0.4%1.2%14.3%51.00
23Onley Oscar0.4%0.2%0.4%1.1%13.8%101.00
24Govekar Matevz0.3%0.6%0.2%4.8%19.1%501.00
25Skjelmose Mattias0.3%0.4%0.2%1.6%9.5%251.00
26Macias Cesar0.2%0.2%0.3%2.2%43.3%n/a
27Johannessen Tobias Halland0.2%0.2%0.2%1.2%7.2%81.00
28Brenner Marco0.2%0.3%0.2%1.7%22.2%126.00
29Covi Alessandro0.2%0.2%0.2%1.8%16.9%126.00
30Vader Milan0.2%0.1%0.2%2.4%23.6%501.00
Over the top and gone — a small move holds the last 7.8 km — top 30, all heads · top 10 on GC and the sprinters removed
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1van Aert Wout7.4%4.6%8.5%16.3%44.5%1.75
2Debruyne Ramses4.4%4.3%4.6%10.0%54.7%67.00
3Johannessen Tobias Halland4.0%3.1%4.5%9.5%47.6%81.00
4Bisiaux Léo4.0%2.7%4.5%7.7%38.4%151.00
5Buitrago Santiago3.8%1.9%4.5%5.8%28.7%201.00
6Brenner Marco3.0%6.1%2.4%15.8%46.9%126.00
7Vermaerke Kevin2.6%1.7%3.0%5.4%40.9%41.00
8Skjelmose Mattias2.6%3.9%2.4%7.9%28.2%251.00
9Laurance Axel2.1%3.5%1.8%9.9%36.4%26.00
10Widar Jarno1.8%2.3%1.8%8.1%47.1%81.00
11Romeo Ivan1.7%1.9%1.7%3.7%6.8%67.00
12Castrillo Pablo1.7%2.6%1.5%4.8%8.5%401.00
13Miquel Delgado Pau1.5%2.1%1.4%6.7%39.3%34.00
14Almeida Joao1.5%1.8%1.4%7.4%13.7%401.00
15Canal Carlos1.4%0.3%1.7%1.4%8.5%251.00
16Mulubrhan Henok1.3%0.3%1.6%3.5%15.1%51.00
17Berrade Urko1.1%1.2%1.2%3.6%21.6%201.00
18Nys Thibau1.1%2.7%0.8%8.0%22.4%19.00
19Camprubí Marcel1.1%1.5%1.0%6.0%31.1%67.00
20Paret-Peintre Valentin1.0%3.2%0.4%4.9%14.9%67.00
21Martin Guillaume0.9%0.3%1.1%1.6%22.9%401.00
22Covi Alessandro0.9%0.1%1.2%1.0%10.6%126.00
23García Raúl0.9%0.9%1.0%2.3%8.8%401.00
24Tronchon Bastien0.9%1.7%0.8%6.9%25.5%51.00
25Landa Mikel0.8%0.1%1.0%1.8%5.6%n/a
26Romele Alessandro0.8%1.9%0.5%6.6%29.7%21.00
27Marti Pau0.7%0.3%0.9%1.2%19.3%601.00
28Vansevenant Mauri0.7%0.4%0.8%1.8%11.4%501.00
29Svestad-Bårdseng Embret0.7%0.3%0.8%1.3%10.5%n/a
30Steinhauser Georg0.7%0.3%0.8%9.3%12.2%301.00
Hindsight (post-hoc) — the day as raced: the circuit split the race, then forty sprinted — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Brennan Matthew26.8%35.1%22.5%53.8%67.9%5.50
2van Aert Wout15.0%7.9%15.5%26.6%54.2%1.75
3Meeus Jordi6.3%8.0%5.4%23.3%37.0%101.00
4Debruyne Ramses4.2%3.3%4.0%9.8%48.8%67.00
5Miquel Delgado Pau3.0%2.2%2.9%7.8%40.1%34.00
6Laurance Axel2.9%3.9%2.4%11.2%41.8%26.00
7De Schuyteneer Steffen2.8%2.2%2.7%6.3%25.8%401.00
8Onley Oscar2.5%0.7%2.8%3.9%34.4%101.00
9Cort Magnus2.0%3.7%1.4%17.6%39.8%21.00
10Coquard Bryan2.0%2.2%1.8%7.2%30.4%34.00
11Roglic Primoz2.0%0.6%2.2%2.2%26.5%201.00
12Nys Thibau1.8%4.7%1.0%13.9%35.5%19.00
13Johannessen Tobias Halland1.8%1.4%1.7%4.2%16.5%81.00
14Brenner Marco1.6%3.6%1.0%10.2%38.9%126.00
15Romele Alessandro1.5%2.7%1.1%12.2%34.3%21.00
16Carapaz Richard1.4%0.2%1.6%2.3%27.8%26.00
17Bisiaux Léo1.3%2.1%1.0%5.0%19.4%151.00
18Berthet Clément1.1%0.3%1.3%3.1%21.9%n/a
19Skjelmose Mattias1.1%1.0%1.1%3.3%18.7%251.00
20Hofstetter Hugo1.1%1.9%0.9%9.2%37.5%126.00
21Canal Carlos1.1%0.3%1.2%2.5%14.0%251.00
22Tronchon Bastien1.1%2.3%0.7%9.4%36.1%51.00
23Camprubí Marcel1.0%0.3%1.1%5.7%32.5%67.00
24Braet Vito1.0%0.3%1.1%4.1%26.2%81.00
25Vermaerke Kevin1.0%0.2%1.1%1.0%11.2%41.00
26Albanese Vincenzo0.9%1.7%0.6%11.7%51.8%41.00
27Fisher-Black Finn0.9%0.9%0.8%5.9%19.1%81.00
28Buitrago Santiago0.9%1.4%0.7%3.6%12.7%201.00
29Martin Guillaume0.8%0.3%0.9%1.6%20.0%401.00
30Mas Enric0.8%0.3%0.8%2.2%31.5%501.00

Angle

If the break goes — the field with the sprinters and the GC pool removed

On a flat day the escape has to beat the fast men home, so the pool that can win from it is the field minus every pure sprinter and minus the top 10 on GC after stage 20. Pure sprinter is the model's own verdict, not a hand list: real speed on a flat-sprint anchor of this exact field, but collapsing to a fraction of it once the road turns selective — that collapse is what separates a Merlier from a Pedersen. Classified out: Aular Orluis, Braet Vito, Brennan Matthew, Coquard Bryan, Cort Magnus, Dainese Alberto, De Schuyteneer Steffen, Hofstetter Hugo, Macias Cesar, Meeus Jordi. The conditional column renormalizes the survivors' win probability under the 'Late move' read over this pool (P(win | the break wins); the pool holds 75% of the unconditional book). The model cannot see who actually gets up the road — read this as a fitness-for-the-day ranking, not break-formation odds.

RiderTeamLate move win pP(win | break wins)Book oddsBook devig
van Aert WoutTeam Visma | Lease a Bike7.4%9.8%237.4%
Debruyne RamsesAlpecin-Premier Tech4.4%5.8%671.0%
Johannessen Tobias HallandUno-X Mobility4.0%5.4%810.8%
Bisiaux LéoDecathlon CMA CGM Team4.0%5.3%1510.4%
Buitrago SantiagoBahrain Victorious3.8%5.1%2010.3%
Brenner MarcoTudor Pro Cycling Team3.0%4.0%1260.5%
Vermaerke KevinUAE Team Emirates-XRG2.6%3.4%411.6%
Skjelmose MattiasLidl-Trek2.6%3.4%2510.3%
Laurance AxelNetcompany INEOS2.1%2.7%262.5%
Widar JarnoLotto-Intermarché1.8%2.4%810.8%
Romeo IvanMovistar Team1.7%2.2%671.0%
Castrillo PabloMovistar Team1.7%2.2%4010.2%
Miquel Delgado PauBahrain Victorious1.5%2.0%341.9%
Almeida JoaoUAE Team Emirates-XRG1.5%1.9%4010.2%

Angle

The book's card — its favourites under our readings

Shortest book prices for the stage, with our blend win probability (and rank) under each scenario. 'free' = outside the excluded GC pool (top 10 on GC after stage 20), i.e. the type the peloton might let up the road.

RiderBook oddsDevigCobbled selectionRegroup gallopLate moveGC status
van Aert Wout1.7537.4%12.5% (#2)9.7% (#3)7.4% (#1)free
Brennan Matthew5.5011.9%28.4% (#1)41.5% (#1)1.8% (#14)free
Nys Thibau19.003.4%1.3% (#14)0.8% (#15)1.1% (#26)free
Cort Magnus21.003.1%2.0% (#8)1.5% (#9)0.9% (#35)free
Romele Alessandro21.003.1%1.3% (#13)1.1% (#12)0.8% (#39)free
Laurance Axel26.002.5%2.9% (#5)2.2% (#5)2.1% (#9)free
Carapaz Richard26.002.5%1.0% (#18)0.2% (#37)0.9% (#33)GC #4
Miquel Delgado Pau34.001.9%2.5% (#6)2.0% (#6)1.5% (#19)free
Coquard Bryan34.001.9%1.5% (#10)2.0% (#7)0.3% (#66)free
Albanese Vincenzo41.001.6%0.4% (#35)0.8% (#16)0.6% (#49)free

After the stage

Results — won by Johannessen Tobias Halland

PosRiderTeamCobbled selection win pRegroup gallop win pLate move win pHindsight (post-hoc) win p
1Johannessen Tobias HallandUno-X Mobility1.6%0.2%4.0%1.8%
2Romele AlessandroXDS Astana Team1.3%1.1%0.8%1.5%
3Debruyne RamsesAlpecin-Premier Tech2.2%1.6%4.4%4.2%
4Brennan MatthewTeam Visma | Lease a Bike28.4%41.5%1.8%26.8%
5Tronchon BastienGroupama-FDJ United0.8%0.7%0.9%1.1%
6Bilbao PelloBahrain Victorious0.2%0.0%0.5%0.3%
7Fisher-Black FinnRed Bull-BORA-hansgrohe0.4%0.5%0.5%0.9%
8Laurance AxelNetcompany INEOS Cycling Team2.9%2.2%2.1%2.9%
9Martí PauNSN Cycling Team––––
10Brenner MarcoTudor Pro Cycling Team0.5%0.2%3.0%1.6%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Cobbled selection1.59%0.81%
Regroup gallop0.22%0.81%
Late move4.04%0.81%
Hindsight (post-hoc)1.79%0.81%

Reflection

What we make of it

The circuit did what the read said it would, and the label still came back bunch. Tobias Halland Johannessen won in 2:54:08 from Alessandro Romele and Ramses Debruyne, with forty riders on his time, seventy-eight more at 1:49 and fourteen at 3:59. Forty is a gallop, so the oracle graded the day bunch. The key was res_7 .40 / bunch .35 / res_1 .25: covered, not exact, weight on true 0.35. The shadow agent had the same three items with bunch last and scored 0.25.

The composition read was right and the macro was about something else. The front fifteen came back sprint .20, rolling .267, mountain .267 and time trial .133, with a front-five classification median of 77th — not a sprinters' front. Matthew Brennan, who won four stages at this race, was fourth. Wout van Aert, the book's favourite at 1.75 for 37.4% devigged, was sixty-fifth. The men who could use the cobbled wall were the men at the front, exactly as the morning read argued; the bunch macro grades winner-group size, not winner type, and those two questions had different answers today.

The hedge paid off for a reason that did not apply. Bunch carried 0.35 rather than a minority weight largely because the last two Tour circuit finales at Montmartre recorded every finisher on the winner's time, which would have made bunch true by construction. Granada did not neutralise: the winner-group proportion was 0.282, not 1.000, and the road produced the split honestly. So the extra weight was right and the argument behind it was wrong, which is worth recording as plainly as a miss would have been. The transferable part is narrower than it looked: the freeze is a Tour practice, not a grand tour one.

The branch structure earned its keep even though the headline board did not. The late-move read had van Aert first, Debruyne second and Johannessen third — two of the actual podium in its top three — and priced the winner at 4.25% against a book that had him at 0.81%. The other two reads had Brennan first at 28.5% and 40.4%, and the hindsight run, given the day's real shape, still puts him first at 24.5%. The model cannot see that a rider who has won four sprints is the wrong rider for a finish reached over a cobbled ramp four times; the scenario fork is what carried that knowledge, and on this day it carried it well.

The race ends as it stood. Everyone in the classification fight finished in the 1:49 group, so Enric Mas wins the Vuelta from Primoz Roglic at 2:15 and Felix Gall at 2:44, with Richard Carapaz fourth, Sepp Kuss fifth and Oscar Onley sixth and in the young riders' jersey. Van Aert takes the points classification from Brennan and Santiago Buitrago the mountains. Across the campaign the day key was exact on 8 of 17 keyed stages and covered on 15, at a mean weight on the true item of 0.49, with three stages unkeyed because the daily cycle was missed.